出于好奇,我尝试了这段代码,来自一个面试问题[*]
int main(int argc, char *argv[])
{
int a = 1234;
printf("Outer: %d\n", a);
{
int a(a);
printf("Inner: %d\n", a);
}
}
在 Linux(g++ 4.6.3 和 clang++ 3.0)上编译时,它输出:
Outer: 1234
Inner: -1217375632
但是在 Windows (VS2010) 上它会打印:
Outer: 1234
Inner: 1234
基本原理是,在第二个“a”变量的复制构造函数完成之前,第一个“a”变量仍然可以访问。但是我不确定这是否是标准行为,或者只是(另一个)微软的怪癖。
任何的想法?
[*] 实际问题是:
如何在不使用临时变量或全局变量的情况下使用包含范围内的同名变量的值来初始化范围内的变量?
{
// Not at global scope here
int a = 1234;
{
int a;
// how do you set this a to the value of the containing scope a ?
}
}