<分区>
我想将复制减少到最低限度,尤其是对于昂贵的类型/类。所以我可以这样定义重载:
void SetParams(const std::map<int, std::string> ¶ms) { mParams = parameters; }
void SetParams(std::map<int, std::string> &¶ms) { mParams = std::move(params); }
void SetBoardInfo(const DataInfoStruct &board_info) { mBoardInfo = board_info; }
void SetBoardInfo(DataInfoStruct &&board_info) { mBoardInfo = std::move(board_info); }
在一个类中有一个名为 mParams 的 std::map 成员变量和一个名为 mBoardInfo 的 DataInfoStruct 结构成员。
由于 DataInfoStruct 没有用户定义的构造函数或析构函数,我假设它有一个隐式移动构造函数。
然后我可以使用左值或右值调用任一重载。但是,我可以像这样只拥有每个函数的一个版本:
void SetParams(std::map<int, std::string> params) { mParams = std::move(params); }
void SetBoardInfo(DataInfoStruct board_info) { mBoardInfo = std::move(board_info); }
在第二种方式中,我将始终创建一个拷贝,因为我按值传递,但随后我将参数移动到成员变量中。如果我传递一个右值,我根本不进行复制,但是对于一个左值,将始终生成一个拷贝 - 如果我使用第一种方法,我将以任何方式进行复制。
推荐这两种方法中的哪一种?右值引用最好只用于构造函数和赋值运算符吗?