为什么下面的代码会使用引用自身的循环常量变量进行编译?
#include <iostream>
extern int main(int argc, char* argv[])
{
const int foo = foo * 60;
std::cout << foo << std::endl;
return 0;
}我使用SUNWspro编译器在Solaris5.10 x86主机上编译:
/opt/SUNWspro/bin/CC test.cpp为了完整性,下面是它打印的内容:
$ ./a.out
-519270512发布于 2012-07-27 10:24:47
在C++中,变量在作用域中,可以用作它们自己的初始化器的一部分。例如,以下代码也是合法的:
int x = x;这样做会导致未定义的行为,因为您在初始化之前引用了x的值。然而,这是完全合法的代码。我认为这背后的基本原理是,在某些情况下,您可能希望对象在构造过程中引用其自身。例如,您可以这样做:
MyObject x(137, &x); // Pass a pointer to x into its own constructor不过,老实说,我不明白你为什么要这么做。
希望这能有所帮助!
https://stackoverflow.com/questions/11680628
复制相似问题