gpt4 book ai didi

c++ - 对 vector 使用 std::move

转载 作者:行者123 更新时间:2023-12-04 17:11:20 45 4
gpt4 key购买 nike

我有一个关于使用 std::move 的问题在 C++ 中。

假设我有以下类,它在其构造函数中采用 std::vector作为参数:

class A
{
public:
A(std::vector<char> v): v(v) {}
private:
std::vector<char> v;
};

但如果我在某处写下以下内容:
std::vector<char> v;
A a(v);
std::vector 的拷贝构造函数会被调用两次,对吧?
那么我应该为 A 写构造函数吗?像下面这样?
class A
{
public:
A(std::vector<char> v): v(std::move(v)) {}
private:
std::vector<char> v;
};

如果我想调用以下内容怎么办?
std::vector<char> v;
A a(std::move(v));

构造函数的第二个版本是否可以,或者我应该为 A 创建另一个构造函数吗?需要 std::vector<char>&& ?

最佳答案

你的第二个方案很好。

vector 将在第二个版本中 move 两次(将按值参数 move 到您的成员中)。如果您不介意额外 move 的成本,您可以坚持只将按值参数 move 到您的成员中。

如果您介意,则为参数的不同值类别创建两个构造函数。

关于c++ - 对 vector 使用 std::move,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307763/

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