C++常量循环声明

C++ const circular declaration

本文关键字:声明 循环 常量 C++      更新时间:2023-10-16

为什么以下代码使用引用自身的循环常量变量进行编译?

#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

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

int x = x;

这样做会导致未定义的行为,因为您在初始化x之前引用了它的值。然而,这完全是法律法规。我认为这背后的理由是,在某些情况下,你可能希望一个对象在构造过程中引用它自己。例如,你可以想象这样做:

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

老实说,我不知道你为什么要这么做。

希望这能有所帮助!