gpt4 book ai didi

c++ - 为什么由 const 限定的变体成员组成的 union 会导致没有默认的默认构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:27 25 4
gpt4 key购买 nike

N4567 的标准草案建议将默认的默认构造函数定义为删除,如果——根据 12.1,第 4 段:

X is a union and all of its variant members are of const-qualified type (or array thereof),

换句话说,这相当于说,如果其变体成员之一不是 const 限定的,则上述规则不适用。我的问题是:

  • 让它的所有成员都具有 const 限定有什么特别之处(与至少其中一个成员没有 const 限定的相反情况相比),从什么角度来看它是密切相关的到默认的默认构造函数?

最佳答案

假设您有一个只有 const 成员的 union :

union Foo {
const int x;
const double y;
}

默认构造函数必须决定要初始化哪些成员并成为事件成员。一旦创建,您就不能更改任何成员的值(它们都是常量),因此您也不能更改哪个是事件成员。因此,这样的构造与 union 一样毫无用处。

另一方面,如果一个成员不是 const:

union Bar {
int x;
const double y;
Bar() : y(10.0) {}
}

默认构造函数可能有意义,因为您以后仍可以通过以下方式更改事件成员

Bar b;
b.x = 10;

关于c++ - 为什么由 const 限定的变体成员组成的 union 会导致没有默认的默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com