为什么以下代码使用引用自身的循环const变量进行编译?
#include <iostream>
extern int main(int argc, char* argv[])
{
const int foo = foo * 60;
std::cout << foo << std::endl;
return 0;
}
我正在使用SUNWspro编译器在Solaris 5.10 x86主机上进行编译:
/opt/SUNWspro/bin/CC test.cpp
为了完整性,这就是它打印的内容:
$ ./a.out
-519270512
答案 0 :(得分:5)
在C ++中,变量在范围内,可以用作自己的初始值设定项的一部分。例如,以下代码也是合法的:
int x = x;
执行此操作会导致未定义的行为,因为您在初始化之前引用了x
的值。但是,这是完全合法的代码。我认为这背后的基本原理是,在某些情况下,您可能希望对象在构造过程中引用自身。例如,你可以想象做这样的事情:
MyObject x(137, &x); // Pass a pointer to x into its own constructor
但老实说,我不确定你为什么要这样做。
希望这有帮助!