为什么Visual Studio会以不同的方式对待我的对象
Why does Visual Studio treat my objects differently?
我修改了一个基本的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"选项卡将只列出函数的局部变量。
由于rect
和rectb
是在main
函数中定义的,因此它们是该函数的"局部"。如果您试图从函数外部访问它们,编译器不会允许您这样做。除此之外,rect
和rectb
所引用的对象只会和函数一样长。当函数返回时(即,当rect
和rectb
超出范围时(,它们将被销毁。
另一方面,rectc
在main
函数的之外被定义为。虽然rect
和rectb
具有函数局部作用域,但rectc
具有全局作用域,并且可以在任何函数*中使用。因此rectc
将不会出现在"本地"调试器选项卡中。
*这不是严格意义上的正确。引用rectc
的地方仍然需要能够看到它的声明。当代码被拆分到多个文件和/或翻译单元时,这一点非常重要。这可能对你来说意义不大,但你会成功的。
相关文章:
- 如果第一个元素包含任何零,则我的程序以不希望的方式运行
- 我的随机生成器是否不工作,或者我决定人/骨架是否击中对手的方式是否有错误
- 为什么Visual Studio会以不同的方式对待我的对象
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- C++ 编译器正在更改我的结构的对齐方式.我怎样才能防止这种情况
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 我启动程序的方式上的不同行为
- 无法通过编程方式确定我的应用程序使用的TLS版本
- 我正试图在我的SFML Platformer中实现双跳,但它并没有按预期的方式工作
- 我的Qt C++程序以一种不同寻常的方式终止
- 移动语义将如何改善“我的方式”
- 如何让我的代码以不会切断单词(字符串)的方式运行?
- 以编程方式使用 C++ 从我的 NIC 获取端口 #s
- 将我的应用程序与内核连接的最佳方式是什么
- 这是我的程序编写每十亿个组合的一种更有效的方式
- 在我的解释器上为脚本代码实现语法检查器的最佳方式是什么
- 是我的代码以正确的方式使用OOPS概念,还是我让它变得不必要的复杂
- 为什么我的重载模板函数提升为const的方式与非模板函数不同?
- 检查我的互联网提供商是否支持并在我的操作系统中以编程方式启用IPv6/Teredo
- 为什么我不能用谓词的实例化来构造 std::set,但我可以分配一个以这种方式构造的 std::set?