正如初始化所述,需要进行左值到右值的转换?是int x = x;UB吗?C++标准在3.3.2 声明部分中有一个令人惊讶的例子,其中a int用它自己的不确定值初始化:
Run Code Online (Sandbox Code Playgroud)int x = 12; { int x = x; }这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]
Johannes对此问题的回答表明是未定义的行为,因为它需要左值到右值的转换.
在最新的C++ 14草案标准中N3936,可以在此处找到此示例已更改为:
Run Code Online (Sandbox Code Playgroud)unsigned char x = 12; { unsigned char x = x; }这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]
C++ 14中有关于不确定值和未定义行为的变化,这些变化在示例中引发了这种变化吗?
在全局命名空间中给出以下声明:
constexpr int x = x;
Run Code Online (Sandbox Code Playgroud)
这个结构良好吗?
草案C++ 14标准部分3.6.2 [basic.start.init]说:
具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5).[...]
似乎使得示例定义良好的是x在常量初始化期间使用其自己的值初始化,这将0归因于零初始化.
error: the value of 'x' is not usable in a constant expression
constexpr int x = x;
^
Run Code Online (Sandbox Code Playgroud) 我是一个新的c ++和指针,我有这个c ++代码的问题.通常,此代码必须显示"true",但实际上不显示.提前致谢.
class Trie{
public:
Trie* root;
int color;
Trie(){
color=0;
}
~Trie(){
}
};
int main(){
Trie test;
if(test.root==nullptr)cout<<"true"<<endl;
}
Run Code Online (Sandbox Code Playgroud)