You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何可将const std::pair<const T,T>&绑定到std::pair<T,T>?

关于std::pair不同类型的引用绑定问题解析

首先明确:std::pair<int, int> 和 std::pair<const int, int> 是毫无继承关系的独立类型,这点你说的没错。咱们分开看两行代码的逻辑:

为什么const std::pair<const int, int>& ref_ok{p};合法?

当你试图把不同类型的对象绑定到const左值引用时,C++允许编译器执行以下操作:

  1. 先创建一个std::pair<const int, int>类型的临时对象,用原std::pair<int, int>对象p的内容初始化它——因为int可以隐式转换为const int,这个临时对象的构造完全合法。
  2. 再把const引用绑定到这个临时对象上。C++规则明确允许const左值引用绑定临时对象,并且会将临时对象的生命周期延长至与引用的生命周期一致。

这就是这行代码能通过编译的核心原因。

为什么std::pair<const int, int>& ref_invalid{p};不合法?

非const的左值引用有严格限制:它不能绑定到临时对象。
同样,编译器需要先创建std::pair<const int, int>的临时对象来匹配引用类型,但因为引用是非const的,C++禁止这种绑定——这是为了避免你通过引用修改一个很快就会销毁的临时对象(这种修改没有实际意义,还容易引发逻辑bug)。所以这行代码会直接编译报错。

内容的提问来源于stack exchange,提问作者phinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:45:28