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

C++运算符重载中ref-qualifier与cv-qualifier支持右值赋值的原因

C++成员函数ref-qualifier匹配规则解释

这一现象完全遵循C++标准中带ref-qualifier(引用限定符)的成员函数的重载决议规则,核心逻辑可以拆解为以下几点:

基础规则

  • 引用限定符的作用是约束成员函数所绑定的this对象的值类别:
    • 加&限定的成员函数,只能被左值对象调用,因为非const左值引用无法绑定到右值
    • 加&&限定的成员函数,只能被右值对象调用
  • 如果成员函数不带任何引用限定符,默认允许左值、右值对象调用
  • const左值引用(const &)是特殊的:它可以合法绑定到右值对象,因此带const &限定的成员函数同时支持左值、右值(包括const右值)对象调用
  • 重载决议时,对右值对象来说,&&、const &&限定的重载优先级高于const &的重载

对应示例逐一解释

  1. 仅加&限定的operator+=报错
    你只声明了&限定的重载,而foo()是临时对象,属于右值,无法绑定到非const左值引用,没有匹配的重载,自然编译报错。
  2. 加&&重载后右值调用正常
    右值对象优先匹配&&限定的重载,所以调用到新增的右值版本,输出13。
  3. 加const &重载后右值可以调用
    右值虽然不能匹配&的版本,但可以绑定到const左值引用,所以会匹配const &的重载,输出14。
  4. 删除const &&重载后右值调用再次报错
    重载决议时,右值对象匹配const &&的优先级高于const &,你显式删除了const &&的重载,所以编译器会直接报调用已删除函数的错误,从而彻底禁止右值调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:27:01