【发布时间】:2015-04-27 02:17:48
【问题描述】:
最近我在重读 Scott Meyers 的 Effective C++(第 3 版)。根据迈耶斯的说法:
“另外,虽然好的编译器不会设置
为整数类型的 const 对象留出存储空间(除非您创建一个
对象的指针或引用),草率的编译器可能,你可能
不愿意为此类对象留出内存。”
在我的代码中,我可以打印 const 变量的地址,但我没有在其上创建指针或引用。我使用 Visual Studio 2012。
int main()
{
const int x = 8;
std::cout<<x<<" "<<&x<<std::endl;
}
输出是:
8 0015F9F4
谁能解释我这本书和我的代码不匹配的地方?还是我哪里弄错了?
【问题讨论】:
-
你能告诉我们你得到了什么吗?通常,如果您在调试模式下编译,代码中的常量不会被替换
-
您仍然可以获取 const 对象的地址。通过获取地址,您很可能会强制编译器在可执行文件中为其留出一些存储空间。
-
当您获取地址时,您会创建一个临时指针。