gpt4 book ai didi

c++ - 按值或 const 引用传递函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:55 24 4
gpt4 key购买 nike

我应该按值还是按对一个函数的引用来传递 std::string。此函数将此值存储在类的成员变量中。

当谈到值传递或引用传递时,我总是感到困惑。请消除我对此的困惑。

代码如下:

class DataStore {
public:
void addFile(const string& filename, const set< std::string>& filePaths)
{
if (dataStoreMap.insert(make_pair(filename, filePaths)).second)
{
cout << "Data Added" <<endl;
}
else
{
cout << "Data not Added" << endl;
}
}
private:
// member variable
map < string, set < string > > dataStoreMap;
};

我应该像这样声明函数吗:

void addFile(const string& filename, const set< std::string>& filePaths)

void addFile(const string filename, const set< std::string> filePaths)

两者给出相同的结果。如果内存分配或性能有任何问题。

cpp 类中的上述函数调用。

DataStore ds;
set<string> setFileDirectory{ "1", "2", "3", "4", "6", "5" };
ds.addFile("file.txt", setFileDirectory);

setFileDirectory.erase(setFileDirectory.begin(), setFileDirectory.end());
setFileDirectory.insert({ "1", "2", "3", "4", "5", "6" });
ds.addFile("demo.txt", setFileDirectory);

任何详细的解释将不胜感激。

谢谢

最佳答案

当您有一个输入参数时,即函数观察到并且修改的参数时,考虑通过传递它const reference (const &),避免无用的深拷贝(可能需要动态内存分配等)

void addFile(const std::string& filename, 
const std::set<std::string>& filePaths)

附言
当然,如果您传递的参数复制成本低,例如int,您可以按值传递:)

关于c++ - 按值或 const 引用传递函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204556/

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