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

时间:2013-08-19 12:10:25

标签: c++ linux map stl

我有这样的功能:

int insert(std::string, std::string, std::map<std::string, std::string>&)

因为第三个参数是一个引用,给这个参数赋一个默认参数的正确方法是什么?

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

2 个答案:

答案 0 :(得分:3)

Rvalue不会绑定到非const临时值。

但是如果默认有意义,你可能不会修改它,在这种情况下使它成为const而不是std::map<std::string, std::string>()将作为默认值正常工作。即:

int insert(std::string x, std::string y,
           const std::map<std::string, std::string> &m =
                   std::map<std::string, std::string>())

如果你真的需要非const引用,只需创建一个带有一个参数的重载,该参数将传递局部变量。

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

int insert(std::string x, std::string y,
           std::map<std::string, std::string> &m = GLOBAL_map);

我应该警告你,一个修改它的参数的函数,特别是非第一个参数,更糟糕的是设计和全局变量更是如此。

答案 1 :(得分:0)

如果你传递的是非const引用,那是因为你想要的 修改它,并将它传递给左值。从你的文字, 我想你要修改地图,但仅限于此 有条件的。在这种情况下,标准习语是通过 一个指针,nullptr(或NULL0用于预C ++ 11) 默认参数,您什么都不做。