为什么 Visual Studio 以不同的方式对待我的对象?

我不

我修改了一个基本的 C++ 类示例,以查看我是否真的了解 OOP 的工作原理。rectc(7,8)在定义类和附加cout语句后立即添加了一个对象但是,我很惊讶rectc没有出现在本地选项卡中。rectc确实出现在Autos选项卡下,但该图标rect与 &旁边的图标不同rectb这里到底发生了什么?

// Rectangle Project.cpp : class constructor
//

#include <iostream> 
using namespace std; 

class CRectangle { 
    int width, height;
    public: 
        CRectangle (int, int);
        int area() {
            return (width*height);
        }
} rectc(7,8);

CRectangle::CRectangle (int a, int b) {
    width = a;
    height = b;
} 

int main() {
    CRectangle rect(3, 4);
    CRectangle rectb(5, 6);
    cout << "rect area: " << rect.area() << endl;
    cout << "rectb area: " << rectb.area() << endl;
    cout << "rectc area: " << rectc.area() << endl;
    return 0;
}
JMAA

我没有要检查的 VS,但我的猜测是调试器中的“本地”选项卡只会列出函数局部变量。

由于rectrectb是在main函数中定义的,因此它们是函数的“本地”。如果您试图从函数外部访问它们,编译器不会让您这样做。不仅如此,由rect引用的对象的rectb持续时间与函数一样长。当函数返回时(即当rectrectb超出范围时),它们将被破坏。

rectc,另一方面,是函数之外定义mainwhilerectrectbhave function local scoperectc具有全局作用域并且可以在任何函数中使用*。因此rectc不会出现在“locals”调试器选项卡中。


*这不完全正确。地点引用rectc仍然需要能够看到它的声明。当您的代码跨多个文件和/或翻译单元拆分时,这一点很重要。这对你来说可能还没有多大意义,但你会到达那里。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的代码无法在Visual Studio Code中运行?

为什么Visual Studio 2019不编译我的代码?

为什么Visual Studio 2012找不到我的测试?

为什么Visual Studio忽略我编写的新代码?

为什么我的Visual Studio Code任务没有执行?

为什么Visual Studio会尝试注册我的DLL

为什么我的 Visual Studio 项目模板的描述不显示?

为什么在Visual Studio中我= i ++使其增加

为什么Visual Studio代码无法运行我的代码?

为什么Visual Studio无法提取我的类库?

为什么Visual Studio会删除我的文件

为什么我的某些 Visual Studio Code 扩展被禁用

为什么我无法在 Linux 上打开 Visual Studio Code?

在Visual Studio中的链接库,为什么有两种不同的方式?

为什么Eclipse和Visual Studio以不同的方式读取Python字符串?

为什么Visual Studio Code中的Python repl告诉我我的对象未定义?

为什么我在Visual Studio和Qt上编译相同的代码,却得到不同的结果?

在检查 git repo 的状态时,为什么我的命令行提供的信息与 Visual Studio 不同?

在执行Visual Installer更新后,为什么我的Visual Studio 2019 Pro调试速度如此慢?

为什么需要Visual Studio安装nuget?

为什么Visual Studio不了解“线程”?

为什么尽管指向我的虚拟环境,Visual Studio Code为什么仍使用全局python配置?

为什么文件保存快捷方式(ctrl + s)在 Visual Studio 代码中不起作用?

为什么我可以在没有凭据的情况下以编程方式连接到Visual Studio Online项目?

为什么 microsoft visual studio 不允许我选择我的项目目的地?

为什么Visual Studio告诉我我需要引用System.Private.CoreLib?

当我使用std :: wstring时,为什么Visual Studio 2017向我显示错误?

为什么Visual Studio和任务管理器报告不同的内存使用情况?

为什么与IIS相比,Visual Studio调试中的HashTable顺序不同