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')