将 std::map 作为默认参数传递

Pra*_*van 1 c++ linux dictionary stl

我有一个这样的功能:

int insert(std::string, std::string, std::map<std::string, std::string>&)
Run Code Online (Sandbox Code Playgroud)

由于第三个参数是引用,因此为该参数提供默认参数的正确方法是什么?

我想要的是默认设置std::map<std::string, std::string>& = VAL,并且仅当 VAL 不是默认值时才使用地图。

Jan*_*dec 5

右值不会绑定到非常量临时值。

但如果默认值有意义,您可能不会修改它,在这种情况下将其设置为常量,然后就std::map<std::string, std::string>()可以用作默认值了。IE:

int insert(std::string x, std::string y,
           const std::map<std::string, std::string> &m =
                   std::map<std::string, std::string>())
Run Code Online (Sandbox Code Playgroud)

如果您确实需要非常量引用,只需创建一个带有一个传递局部变量的参数的重载。

广告评论:好的。您可以传递全局变量作为默认参数。简单地

int insert(std::string x, std::string y,
           std::map<std::string, std::string> &m = GLOBAL_map);
Run Code Online (Sandbox Code Playgroud)

我应该警告您,修改其参数(尤其是非第一个参数)的函数是相当糟糕的设计,全局变量更是如此。