C+标准是否在C+14中使用不定值和未定义行为方面发生了变化?
包括在初始化是否需要从lvalue到rvalue的转换?是int x = x;UB?C+标准中有一个令人惊讶的例子3.3.2 申报点其中一个int是用它自己的不定值初始化的:
int x = x;
3.3.2
int
int x = 12;{ int x = x; }这里,第二个x是用它自己的(不确定的)值初始化的。-终例 ]
int x = 12;{ int x = x; }
这里,第二个x是用它自己的(不确定的)值初始化的。-终例 ]
约翰斯对这个问题的回答表明,这是一个未定义的行为,因为它需要从lvalue到rvalue的转换。
在最新的C+14标准草案中N3936可以找到这里此示例已更改为:
N3936
unsigned char x = 12;{ unsigned char x = x; }这里,第二个x是用它自己的(不确定的)值初始化的。-终例 ]
unsigned char x = 12;{ unsigned char x = x; }
在这个例子中,C+14中的不确定值和未定义行为是否发生了改变?
holdtom
相关分类