1 回答
TA贡献1805条经验 获得超10个赞
N3936
:
8.5
如果没有为对象指定初始化程序,则该对象是默认初始化的;如果不执行初始化,则具有自动或动态存储持续时间的对象的值不确定。[ 注:具有静态或线程存储持续时间的对象为零初始化对象,请参见3.6.2。- 尾注 ]
如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储持续时间的对象的存储时,该对象具有 不定值,如果不对象执行初始化,则该对象保留一个不确定值,直到替换该值(5.17[expr.ass])。[注意:具有静态或线程存储持续时间的对象为零初始化,请参见3.6.2[basic.start.init]。-尾注] 如果由求值产生不确定值,则除下列情况外,该行为是未定义的。:
如果一个无符号窄字符类型(3.9.1[basic.basic])的不确定值是通过对以下方面的评估而产生的:
然后,操作的结果是一个不确定的值。
条件表达式的第二个或第三个操作数(5.16[expr.cond]),
逗号的右操作数(5.18[除逗号]),
转换或转换为无符号窄字符类型的操作数(4.7[等号整],5.2.3[expr.type.conv],5.2.9[expr.static.cast],5.4[expr.cast],或
被丢弃的值表达式(第5[expr]条),
如果一个无符号窄字符类型的不确定值(3.9.1[basic.basic])是由一个简单赋值运算符(5.17[expr.ass])的右操作数计算产生的,其第一个操作数是无符号窄字符类型的lvalue,则一个不确定值替换左操作数所引用的对象的值。 如果在初始化无符号窄字符类型的对象时,通过初始化表达式的计算生成无符号窄字符类型的不确定值(3.9.1[basic.basic]),则该对象被初始化为不确定的值。
[ 例子:
int f(bool b) { unsigned char c; unsigned char d = c; // OK, d has an indeterminate value int e = d; // undefined behavior return b ? d : 0; // undefined behavior if b is true}— 终例 ]
N3937
C++14 DIS
.
C+1Y之前
4.1
lvalue-rvalue转换
[.]如果对象未初始化,则需要进行此转换的程序具有未定义的行为。[.]
- 1 回答
- 0 关注
- 338 浏览
添加回答
举报