0x5*_*9df 11 c++ variables standards initialization variable-assignment
int test[2] = { 45, test[0] };
int x = (x = 111);
cout << test[0] << " " << test[1] << " " << x << "\n"; // 45 45 111
Run Code Online (Sandbox Code Playgroud)
前两行的作业是否合法?Visual Studio 2010编译并运行它没有任何错误或警告但似乎奇怪的情况可能是未定义的,所以我想确认它是可以接受的.Visual Studio会警告我,如果我做了一些公然反身(并且可能是未定义的),int x = x;那么我想知道这些情况似乎是如何处理的.
从C++标准(C++ 11,但它在C++ 98/03中没有什么不同):
(§3.3.2/ 1)名称的声明点紧接在其完整的声明者(第8条)之后和初始化者之前(如果有的话),[...] [例如:
Run Code Online (Sandbox Code Playgroud)int x = 12; { int x = x; }这里第二个x用它自己的(不确定的)值初始化. - 末端的例子]
这也适用于用户定义的类型以及数组类型.请注意标准如何强调x在第二个示例中使用不确定的值初始化.因此无法知道x初始化的值.