小编60q*_*60q的帖子

当参数类没有移动构造函数时,IDE 建议“按值传递并使用 std move”

struct Person
{
    int mId; 
    std::string mName; 

    Person(int id, std::string name) : mId(id), mName(std::move(name))
    {
    }
};

struct Node
{
    Person mData;  
    Node* mLeft;
    Node* mRight;

    Node(Person data) : mData(std::move(data)), mLeft(nullptr), mRight(nullptr)
    {}
};
Run Code Online (Sandbox Code Playgroud)

在为 Person 类编写构造函数时,我最初将“name”参数定义为 const 引用,但建议将其更改为简单值并使用 std move

我理解这是因为右值字符串可用于初始化“Person”,在这种情况下,该字符串将被移动到变量“name”中而不是被复制。然后它将通过 std::move 进一步移动到成员变量“mName”中。我还认为这仅适用于 std::string 因为它定义了一个移动构造函数。

不明白的是为什么建议我在“Node”类构造函数中再次使用 std::move ,因为我没有为 Person 定义移动构造函数。此外,我注意到从 Person 类中删除字符串成员变量 mName 会停止此 IDE 推荐。

我的猜测是,这是因为 Person 类的默认移动构造函数。

如果有帮助的话,我的 IDE 是 VS2022,推荐来自扩展 Resharper'

c++ variables move-semantics

3
推荐指数
1
解决办法
1489
查看次数

标签 统计

c++ ×1

move-semantics ×1

variables ×1