刚才我遇到了以下类型的错误:
#include <iostream>
const int i = i;
int main(void)
{
/* not allowed by default, but with -fpermissive */
//const int i;
/* allowed by default, even without -fpermissive. Seems to initialize to 0 */
for ( int j = 0; j < i; ++j )
std::cout << "hi";
/* i = 0 */
}
编译:
g++ const-init.cpp -Wall -Wextra -pedantic -O2
因为编译器以静默方式将i初始化为0,所以某些循环被优化掉了。由于复制粘贴错误而发生错误。
这个'功能'是否有效和/或在某处记录?它有什么用呢?它有名字吗?
编辑:没有-O2 g ++的行为就像我希望它的行为:它发出以下错误
const-init.cpp:8:19: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
const int i = i;
^
那么为什么编译器在使用-O2
标志时假设为0,甚至因为这个假设而删除了整个循环?
答案 0 :(得分:3)
它的名字是&#34;未定义的行为&#34;并将i
设置为0只是一种可能的结果。