用自己

时间:2015-11-14 02:00:29

标签: c++ initialization const

刚才我遇到了以下类型的错误:

#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,甚至因为这个假设而删除了整个循环?

1 个答案:

答案 0 :(得分:3)

它的名字是&#34;未定义的行为&#34;并将i设置为0只是一种可能的结果。