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

Why does Visual Studio treat my objects differently?

本文关键字:方式 我的 对象 Studio Visual 为什么      更新时间:2023-10-16

我修改了一个基本的C++类示例,看看我是否真的理解OOP是如何工作的。我在定义类之后添加了一个rectc(7,8)对象和一个额外的cout语句。然而,我很惊讶rectc没有出现在locals选项卡中。rectc确实出现在Autos

// 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;
}

我手头没有VS要检查,但我猜测调试器中的"Locals"选项卡将只列出函数的局部变量。

由于rectrectb是在main函数中定义的,因此它们是该函数的"局部"。如果您试图从函数外部访问它们,编译器不会允许您这样做。除此之外,rectrectb所引用的对象只会和函数一样长。当函数返回时(即,当rectrectb超出范围时(,它们将被销毁。

另一方面,rectcmain函数的之外被定义为。虽然rectrectb具有函数局部作用域,但rectc具有全局作用域,并且可以在任何函数*中使用。因此rectc将不会出现在"本地"调试器选项卡中。


*这不是严格意义上的正确。引用rectc的地方仍然需要能够看到它的声明。当代码被拆分到多个文件和/或翻译单元时,这一点非常重要。这可能对你来说意义不大,但你会成功的。

相关文章: