【发布时间】:2014-01-16 17:32:32
【问题描述】:
12.1 p14 中未指定值一词的确切含义是什么:
在构造一个const对象的过程中,如果对象的值 或其任何子对象通过不 从构造函数的 this 指针直接或间接获得, 如此获得的对象或子对象的值是未指定的。 [ 示例:
struct C;
void no_opt(C*);
struct C {
int c;
C() : c(0) { no_opt(this); }
};
const C cobj;
void no_opt(C* cptr) {
int i = cobj.c * 100; // value of cobj.c is unspecified
cptr->c = 1;
cout << cobj.c * 100 // value of cobj.c is unspecified
<< ’\n’;
}
——结束示例]
我可以在 1.3.25 中找到未指明行为的定义:
未指明的行为
行为,对于格式良好的程序构造和正确的数据,这取决于实现
我在 VS2010 中运行了这个 sn-p,我得到了上面两个表达式
cobj.c的正确结果:第一个表达式为0,最后一个表达式为1。这里没有说明什么?未指定行为的定义是否适用于未指定的值,即,这是否意味着在另一个编译器中我可以获得不同的结果?
【问题讨论】:
标签: c++ c++11 constructor language-lawyer