我应该按值还是按对一个函数的引用来传递 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/