Aggregate vs value使用填充初始化聚合类对象

Joh*_*itb 8 c++ padding c++14

聚合初始化初始化aggrete类对象的数据成员,而聚合的值初始化将首先将其初始化为零,这也会填充填充字节,如以下规范引用所示

如果T是(可能是cv限定的)非联合类类型,则每个非静态数据成员和每个基类子对象都是零初始化的,并且填充初始化为零位;

这是否意味着通常应该避免使用()和更喜欢初始化聚合结构,{}因为后者不必确保填充位为零?

如果上面的答案是"否",是否存在实现不填充填充{}但使用填充的情况()?在这些情况下,对于程序员来说,更好的选择是什么?

Mar*_*ica 1

不。首先,我怀疑大多数编译器实际上都会使用单个值(包括填充)对聚合(给定常量参数)进行值初始化。

然而,不这样做的重要原因是,应该保留这种微观优化,直到您获得显示存在问题的测量结果(我敢打赌您永远不会得到这些测量结果)。同时,写下最清楚的那个。