2013-08-19 71 views
0

我有这样的功能:传递的std ::地图作为默认参数参数

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

,因为第三个参数是一个参考,是什么让一个默认参数这样的说法正确的方法是什么?

我想是默认设置std::map<std::string, std::string>& = VAL只使用如果VAL不是默认值的地图。

+1

我想知道为什么你需要一个默认地图插入?您可以从某个函数返回对“静态”本地映射的引用,并将其用作默认值。 – jrok

+0

如果输入中有地图,我将它插入到输入地图中。否则我插入到另一个全球地图。 –

+0

如果VAL是已经存在的地图,那很好。 –

回答

3

R值将不绑定到一个非const暂时的。

但是,如果默认是有道理的,你可能不修改它,在这种情况下,使它常量,比std::map<std::string, std::string>()将作为默认值就好了。 I .: .:

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

我要提醒你,该修改它的参数,尤其是非第一个参数的功能,是相当糟糕的设计和全局变量更是如此。

+0

我需要将数据添加到输入映射。 –

+0

我知道这将是一个糟糕的设计,所以不会这样做。将尝试找到更好的解决方案,因为我需要编辑输入数据。 –

+0

@PrasanthMadhavan:只需使用表达式返回参数中的默认映射。但我真的认为你应该对整体设计给予更多的思考(可能在这里提出一个更广泛的问题)。 –

0

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