gpt4 book ai didi

c++ - 对于可移动类型,按值传递比重载函数更好吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:54 25 4
gpt4 key购买 nike

<分区>

我想将复制减少到最低限度,尤其是对于昂贵的类型/类。所以我可以这样定义重载:

void SetParams(const std::map<int, std::string> &params) { mParams = parameters; }
void SetParams(std::map<int, std::string> &&params) { 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); }

在第二种方式中,我将始终创建一个拷贝,因为我按值传递,但随后我将参数移动到成员变量中。如果我传递一个右值,我根本不进行复制,但是对于一个左值,将始终生成一个拷贝 - 如果我使用第一种方法,我将以任何方式进行复制。

推荐这两种方法中的哪一种?右值引用最好只用于构造函数和赋值运算符吗?

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