const引用传递的参数是否完全充当函数中const类型的变量?

时间:2015-09-24 10:46:43

标签: c++ dictionary key const pass-by-reference

更准确地说,我想知道在以下代码段中进行了多少std::pair个模板构造函数调用:一个(对于std::pair<const KeyType, ValueType>)或两个(对于std::pair<KeyType, ValueType>来说是第一个make_pair然后是std::pair<const KeyType, ValueType> insert之后的第二个?

std::map<KeyType, ValueType> m;

void addToMap(const KeyType& key)
{
    ValueType val = someCalculation(key);
    m.insert(std::make_pair(key, val));
}

1 个答案:

答案 0 :(得分:3)

制作了两份副本,因为std::make_pair(key,val)返回std::pair<KeyType, ValueType>而不是std::pair<const KeyType, ValueType>,因此需要复制。

可以强制std::make_pair提供正确的类型:

m.insert(std::make_pair<const KeyType, ValueType>(key, val));

但是你可以直接构建一个std::pair

m.insert(std::pair<const KeyType, ValueType>{key, val});
m.insert(decltype(m)::value_type(key,val));

但是,最好的选择是使用std::pair避免首先创建临时emplace

m.emplace(key, val);