我应该通过值传递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引用(const&)传递它,以避免无用的深拷贝(可能需要动态内存分配等)
void addFile(const std::string& filename,
const std::set<std::string>& filePaths)
附:
当然,如果你传递的是复制便宜的参数,比如整数,你只需按值传递:)