gpt4 book ai didi

c++ - `vector v;` 和 `vector v = vector();` 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 12:42:42 29 4
gpt4 key购买 nike

有什么区别

std::vector<int> v;

std::vector<int> v = std::vector<int>();

直观地说,我永远不会使用第二个版本,但我不确定是否有任何区别。在我看来,第二行只是一个默认构造函数,用于构建一个临时对象,然后由移动赋值运算符移动。

我想知道第二行是否不等同于

std::vector<int> v = *(new std::vector<int>()); 

因此导致 vector 本身在堆上(动态分配)。如果是这种情况,那么大多数情况下可能会首选第一行。

这些代码行有何不同?

最佳答案

从 C++17 开始,没有任何区别。

有一个利基用例,其中 std::vector = std::vector初始化语法非常有用(尽管不是用于默认构造):当想要为 std::vector<int> 提供“计数,值”初始化器时类的成员直接在类的定义中:

struct S {
std::vector<int> v; // Want to supply `(5, 42)` initializer here. How?
};

类内初始化器仅支持 ={}语法,这意味着我们不能只说

struct S {
std::vector<int> v(5, 42); // Error
};

如果我们使用

struct S {
std::vector<int> v{ 5, 42 }; // or = { 5, 42 }
};

编译器会将其解释为值列表,而不是“count, value”对,这不是我们想要的。

所以,一种正确的方法是

struct S {
std::vector<int> v = std::vector(5, 42);
};

关于c++ - `vector<int> v;` 和 `vector<int> v = vector<int>();` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937426/

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