0

我有这样的功能:

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

由于第三个参数是一个引用,那么给这个参数一个默认参数的正确方法是什么?

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

4

2 回答 2

3

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);

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

于 2013-08-19T12:14:39.880 回答
0

如果你传递一个非常量引用,那是因为你想修改它,并将传递一个左值。从您的文字中,我了解到您想修改地图,但只是有条件的。在这种情况下,标准习惯用法是传递一个指针,将nullptr(或NULL0用于 C++11 之前的版本)作为默认参数,您什么也不做。

于 2013-08-19T13:01:53.460 回答