c – 通过值或const引用函数?

我应该通过值传递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)

附:
当然,如果你传递的是复制便宜的参数,比如整数,你只需按值传递:)

点赞