gpt4 book ai didi

C++ vector 在初始化列表中设置大小或调整大小

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:22 28 4
gpt4 key购买 nike

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

  • 初始化列表:

    class Trial {
    private:
    std::vector<int> _vec;

    public:
    Trial(size_t length) : _vec(length) {
    }
    };
  • 调整大小:

    class Trial {
    private:
    std::vector<int> _vec;

    public:
    Trial(size_t length) {
    _vec.resize(length);
    }
    };

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

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

最佳答案

后者通常会首先默认构造 vector ,然后重新分配 vector 的存储空间以适应新的长度(如果大于默认长度)(参见此处的 assembly code )。相反,第一个变体将只有一个分配(少 assembly code )。

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

关于C++ vector 在初始化列表中设置大小或调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963957/

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