c++ - 对“pair<...>”类型的非常量左值引用不能绑定到“pair<...>”类型的临时值
问题描述
我正在尝试使用auto&
语法获取对已放置项目的引用,但由于上述错误而无法编译。
在这种情况下,如何获得对已放置项目的参考?
我尝试使用const auto&
,但该对象似乎在我的实际应用程序上调用析构函数,因此它似乎充其量只是一个假引用。
#include <string>
#include <unordered_map>
class Connection {
public:
bool foo{};
};
int main() {
std::unordered_map<std::string, Connection> connections;
auto& [connection, inserted] = connections.try_emplace("test");
}
解决方案
那是因为try_emplace
返回 a pair<iterator, bool>
,这是一个临时的,而不是对插入元素的引用。请参阅cppreference 上的说明
安置后,你可以说
auto& elem = connections["test"];
或者
auto [connection, inserted] = connections.try_emplace("test");
auto& elem = *connection;
例如,获取对元素的引用。
第一个变体返回对与 key 关联的实际值的引用test
,而第二个变体返回对 map 元素的引用,即 a pair<const key_type, mapped_type>
,即第一个版本基本上second
直接返回所述对。
const auto&
编译是因为声明const
对临时引用的引用是合法的,但不是非const
左值引用。
推荐阅读
- google-cloud-platform - 如何使用 firewalls.list 方法按 sourceRanges 0.0.0.0/0 过滤防火墙规则列表
- reactjs - 格子 api 脚本在下一个 js 应用程序中全局化
- bash - 我可以在 UNIX 的 awk 中使用 awk 吗?
- amazon-web-services - AWS kinesis 视频流 (KVS) 多点
- python - 与数据框中的前一行相比,如何识别行中的字符串更改?
- php - php - 获取当前变量名并将其作为数组键
- c++ - 当原始字符串和反向字符串相同时,为什么第一种和第二种情况一直返回 false?回文码
- php - mysql 之类的查询,如何对表中的两列进行排序,但按一列匹配的结果排序
- react-native - 在 react native 中使用 FlatList 时如何滚动?
- tensorflow-lite - NMS 在 tensorflow-lite 量化模型中不起作用