C ++ const循环声明

时间:2012-07-27 02:23:00

标签: c++ const

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

1 个答案:

答案 0 :(得分:5)

在C ++中,变量在范围内,可以用作自己的初始值设定项的一部分。例如,以下代码也是合法的:

int x = x;

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

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

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

希望这有帮助!