我有这样的功能:
int insert(std::string, std::string, std::map<std::string, std::string>&)
由于第三个参数是一个引用,那么给这个参数一个默认参数的正确方法是什么?
我想要的是std::map<std::string, std::string>& = VAL
默认设置并仅在 VAL 不是默认值时使用地图。
Rvalue 不会绑定到非常量临时值。
但是,如果默认值有意义,您可能不会修改它,在这种情况下,将其设为 const,然后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>())
如果您确实需要非常量引用,只需使用一个将传递局部变量的参数创建一个重载。
广告评论:好的。您可以将全局变量作为默认参数传递。简单地
int insert(std::string x, std::string y,
std::map<std::string, std::string> &m = GLOBAL_map);
我应该警告你,修改它的参数的函数,尤其是非第一个参数,是相当糟糕的设计和全局变量更是如此。
如果你传递一个非常量引用,那是因为你想修改它,并将传递一个左值。从您的文字中,我了解到您想修改地图,但只是有条件的。在这种情况下,标准习惯用法是传递一个指针,将nullptr
(或NULL
或0
用于 C++11 之前的版本)作为默认参数,您什么也不做。