【发布时间】:2016-03-30 05:27:40
【问题描述】:
一个 POD struct 可以在 C++11 中按如下方式进行零初始化:
SomeStruct s{};
但是,如果我已经有一个结构实例并且我想将它重新初始化为零,我该怎么办?以下似乎有效:
s = {};
有人可以指出相关的标准吗?我认为这是正在发生的事情:
- 创建了一个新的零初始化实例。
- 新实例被分配给现有实例,调用隐式赋值运算符。
【问题讨论】:
-
我不知道标准,但是 - 其中一些可能会被优化掉。事实上,如果你不使用 0,也许 all 这一切都被优化掉了。
-
那里有一个明确的规则,允许在赋值的右侧使用大括号。你的假设是非常正确的。
-
没有“重新初始化”之类的东西。你初始化一次。就一次。您正在做的是分配,并且在微妙和不那么微妙的方式上非常不同。
-
@LightnessRacesinOrbit 我想我的意思是“重置”。基本上我想将它设置回与使用
= {};初始化的对象相同的状态。 -
另一个问题是填充。零初始化会将填充归零,但复制它不需要赋值。
标签: c++ c++11 struct language-lawyer