相关疑难解决方法(0)

在C++ 14中,C++标准是否在使用不确定值和未定义行为方面发生了变化?

正如初始化所述,需要进行左值到右值的转换?是int x = x;UB吗?C++标准在3.3.2 声明部分中有一个令人惊讶的例子,其中a int用它自己的不确定值初始化:

int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

Johannes对此问题的回答表明是未定义的行为,因为它需要左值到右值的转换.

在最新的C++ 14草案标准中N3936,可以在此处找到此示例已更改为:

unsigned char x = 12;
{ unsigned char x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

C++ 14中有关于不确定值和未定义行为的变化,这些变化在示例中引发了这种变化吗?

c++ undefined-behavior language-lawyer c++11 c++14

62
推荐指数
1
解决办法
3991
查看次数

静态constexpr变量的自我初始化是否格式良好?

在全局命名空间中给出以下声明:

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归因于零初始化.

这是真的吗?当gcc生成诊断时,clang 接受此代码:

error: the value of 'x' is not usable in a constant expression
constexpr int x = x;
                  ^
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer constexpr c++14 c++17

26
推荐指数
1
解决办法
610
查看次数

指针未在c ++类中初始化

我是一个新的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)

c++

2
推荐指数
1
解决办法
193
查看次数