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

标签 c++ dictionary key constants 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));
}

最佳答案

制作了两份,如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);

关于c++ - const引用传递的参数在函数中是否完全充当了const类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32759399/

相关文章:

c++ - 如何在没有 std::initializer_list 的情况下列出初始化模板类,使其具有固定大小

c++ - 父进程 "listening"到子消息

python - 打印列表中给定字典键的所有值

java - 对ECC公钥的长度感到困惑

c++ - malloc 中的段错误 :

C++ char*[] 到 char** 的转换

c++ - 如何通过复制从函数返回引用

list - 斯卡拉 : transform a list into a map

javascript - 如何在Javascript中按数组键对象中的值获取键?

javascript - 对象文字属性值简写