C++常量循环声明
C++ const circular declaration
为什么以下代码使用引用自身的循环常量变量进行编译?
#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
老实说,我不知道你为什么要这么做。
希望这能有所帮助!
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在基于范围的for循环中使用结构化绑定声明
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 如何在头文件中声明类模板(由于循环依赖关系)
- 在变量声明中使用 for 循环
- 在不同循环中多次声明变量的优点
- C++循环依赖关系,未声明的标识符
- 如何每次在不同大小的循环中重新声明相同的数组
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 循环包含依赖项/转发声明
- 如何在 for 循环中声明多个名称相似的数组?
- 使用循环声明 Mat 类
- 循环依赖结构,使用前向声明时结构的错误重定义
- 如何在需要提及需要循环声明的其他类的类中初始化变量?
- 循环内的函数声明
- 如何在 for 循环中声明和使用结构数组?
- 如何将前向声明与 boost::msm 一起使用以避免循环依赖?
- 在 for 循环中声明结构是否合法C++?
- 多声明循环
- C++重新声明循环计数变量的不一致行为