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