3
刚才我有以下种类的错误:编译时初始化C++与本身是常量变量
#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
因为编译器默默初始化我到0某些回路被优化掉。错误是由于复制粘贴错误而发生的。
这个'功能'有效和/或记录在某处?它甚至有什么好处?它有名字吗?
编辑:没有-02 G ++的行为就像我希望它的行为:它使用-O2
标志时,将发出以下错误
const-init.cpp:8:19: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
const int i = i;
^
那么,为什么编译器为我以为0,甚至删除整个因为这个假设循环?
可能的重复:https://stackoverflow.com/questions/28152298/why-is-initialization-of-a-new-variable-by-itself-valid –
有可能比你需要更多的信息[本问答](http://stackoverflow.com/questions/23415661/has-c-standard-changed-with-respect-to-the-use-of-indeterminate-values-and-und),但TL; DR:don'不依赖于'我'的价值。变量'i'在它自己的初始化范围内,但它的值没有明确定义。 – chris
你们很快,发布这个问题后,我注意到 - 墙确实发出了警告,但使用-O2时并不如此。我在问题中指定了 – mxmlnkn