我不小心通过数组中的自引用在程序中创建了一个错误.这是一个非常简化的演示程序,在概念上类似:
#include <iostream>
using namespace std;
int kTest[] = {
kTest[0]
};
int main() {
cout << kTest[0] << endl;
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶我既没有收到编译错误,也没有收到关于此代码的警告!在我的情况下,它最终产生不可预测的输出.它是否访问垃圾内存?
我很好奇在什么情况下这将有明确定义的输出(如果有的话!).
编辑:是否有所作为,如果kTest是static?怎么样const?都?
R S*_*ahu 15
int kTest[] = {
kTest[0]
};
Run Code Online (Sandbox Code Playgroud)
类似于,如果不完全相同
int x = x;
Run Code Online (Sandbox Code Playgroud)
如果在函数中本地声明,它将是未定义的行为.
当kTest一个全局变量时,它似乎很明确.有关其他详细信息,请参阅其他答案