初始化列表中的 C++ 向量集大小或调整大小

Chr*_*isG 3 c++ c++14

以下哪一项是首选/更有效的?

我在生产代码中都见过,但我也听说如果你可以将一些工作委托给编译器,你应该这样做,所以我总是喜欢第一个。

其中一个比另一个更好吗?

Max*_*hof 5

后者通常会首先默认构造向量,然后重新分配向量的存储以容纳新长度(如果大于默认值)(请参阅此处的汇编代码)。相比之下,第一个变体将只有一个分配(更少的 汇编代码)。

请注意,编译器优化可能会看穿这一点,但还有另一个原因(除了避免过早的悲观化)更喜欢第一个:通过显式初始化构造函数初始化列表(或内联)中的所有成员,您可以使用工具通知您何时你不小心留下了一些未初始化的东西。