gpt4 book ai didi

c++ - 从临时分配和引用初始化

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:37 25 4
gpt4 key购买 nike

假设我有以下内容:

boost::unordered_map< string , someValueType > map;
someValueType& value = map[ "key" ] = someValueType();

最后一行包含:

  • someValueType 的临时构造实例
  • 将临时分配到新 map 条目
  • 初始化对 map 条目的引用

所以如果下一行是:

   value.someProperty = 42;

这将尝试更改 map 条目,对吗?不是原来临时的吗?

我知道在这种情况下,如果引用不能采用临时值,因为它是非 const(因此编译器错误或缺少编译器错误会回答我的问题),但是如果我将 const 添加到引用声明中,我我不确定在这种情况下评估规则会说什么

最佳答案

没错。您在右侧有一个带有赋值表达式的初始化:

someValueType & value = (map["key"] = someValueType());

事实上,这相当于:

someValueType & value = map["key"];

这是因为 [] 运算符会在该键不存在的情况下创建一个新元素。

将映射条目绑定(bind)到常量引用没有区别。但是,如果您知道键一定存在,那么即使您只有对映射本身的常量引用,也可以将常量引用绑定(bind)到映射值:

void (MapType const & m)
{
someValueType const & = m.find("key")->second;
}

如果键不存在,这当然是一个错误,因为您将取消引用结束迭代器。

关于c++ - 从临时分配和引用初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com