4

为什么以下代码使用引用自身的循环 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
4

1 回答 1

5

在 C++ 中,变量在作用域内,可以用作它们自己的初始化程序的一部分。例如,下面的代码也是合法的:

int x = x;

这样做会导致未定义的行为,因为您指的是x在初始化之前的值。但是,这是完全合法的代码。我认为这背后的基本原理是,在某些情况下,您可能希望一个对象在其构造过程中引用它自己。例如,你可以想象做这样的事情:

MyObject x(137, &x); // Pass a pointer to x into its own constructor

不过,老实说,我不确定您为什么要这样做。

希望这可以帮助!

于 2012-07-27T02:24:46.783 回答