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

标签 c++ set parameter-passing pass-by-reference pass-by-value

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

相关文章:

c# - 使用 SWIG 从 C++ 生成 C# 接口(interface)

c++ - PE 问题 - 加壳

java - 从 .txt 文件中读取方程式并将其设置为方法的返回

c# - 具有分页、排序和过滤功能的 WebAPI Get 方法

c++ - ubuntu 18.10 上的 std::filesystem 链接错误

c++ - 将成员函数传递给可变参数模板函数

python - 将集合转换为列表

c++ - C++ 设置比较器上的 Visual Studio 断言失败

swift - 将静态方法的引用传递给函数

c - 函数什么都不做