有const和非const成员的并集?
|
这似乎是未定义的行为
union A {
int const x;
float y;
};
A a = { 0 };
a.y = 1;
规格说
在具有静态,线程或自动存储持续时间的const对象所占据的存储位置处创建新对象,或者在此类const对象在其生命周期结束前曾经占据的存储位置处创建新对象会导致不确定的行为。
但是,这很容易诊断错误,没有编译器警告我。我会误解措辞吗?
没有找到相关结果
已邀请:
3 个回复
响摔衅幸
很好,因为它将活动成员从
更改为
。如果随后将“ 4”引用为右值,则该行为将是不确定的:
您在规范中引用的内容与此处无关,因为您没有创建任何新对象。
骇毖煽洁铂
进行限制的所有目的都是为了达到这样一个点:按位赋值将是所有成员的有效赋值运算符,并且不能使用按位赋值来赋值给
。我的猜测是,这只是以前没有人想到的一种情况(尽管它影响到C和C ++,所以已经存在了一段时间)。
搜洼挂时
如果我拿走6英镑,这个错误就会消失。基于gcc的编译器不会抱怨。 编辑:Microsoft Visual C ++编译器具有相同的警告。