【发布时间】:2013-01-23 01:04:26
【问题描述】:
假设我有以下代码:
int foo () {
int const x = 0;
return x;
}
是否允许编译器将 x 移动到全局范围?
在下面的场景中呢? res2 可以根据优化而变化吗?
std::set<int const *> addrs;
int foo () {
int const x = 0;
addrs.insert(&x);
return addrs.size();
}
void bar () {
int res1 = foo();
int res2 = foo();
}
【问题讨论】:
-
我想编译器每次调用都会用
0替换第一个。 -
不,编译器不能将 x 移动到全局范围。但我不认为这正是你的意思。
-
第二个例子的问题是什么?
-
编译器会将您的代码转换为中间代码,其中范围的含义与前端形式不同。这个问题毫无意义。
标签: c++ constants compiler-optimization