我有这样的功能:
int insert(std::string, std::string, std::map<std::string, std::string>&)
因为第三个参数是一个引用,给这个参数赋一个默认参数的正确方法是什么?
我想要的是默认设置std::map<std::string, std::string>& = VAL
并仅在VAL不是默认值时使用地图。
答案 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
(或NULL
或0
用于预C ++ 11)
默认参数,您什么都不做。