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

C++类成员函数后加&、&&、const&、const&&的含义是什么

C++ 成员函数引用限定符含义说明

你看到的&、&&、const&、const&&是C++11标准引入的成员函数引用限定符,作用是限定该成员函数仅能被对应值类别、对应const属性的类对象调用,其中const的语义和你已知的一致:带const的限定符依然保证函数内部不会修改类的非mutable成员。

四个变体的具体含义如下:

  • func_name() &:仅能被非const左值对象调用。比如你声明类的普通变量Demo d;,调用d.func_name()就会匹配这个版本,非const的右值对象(比如临时对象、被std::move修饰的普通对象)调用该函数会编译报错。
  • func_name() &&:仅能被非const右值对象调用。比如调用Demo().func_name()(临时对象属于右值)、std::move(d).func_name()都会匹配这个版本,通常用来做移动语义优化:因为调用该版本的对象马上就要销毁,可以直接转移内部资源,避免不必要的拷贝。
  • func_name() const&:适配范围最广的const版本,可被所有左值对象(无论是否带const)、const右值对象调用,语义和普通const成员函数完全一致,保证函数内部不会修改类成员。
  • func_name() const&&:仅能被const修饰的右值对象调用,属于语义补全的场景,实际开发中使用频率较低,同样保证函数内部不会修改类成员。

典型使用场景

引用限定符最常见的作用是避免悬空引用、优化资源拷贝,示例如下:

class User {
  std::string username;
public:
  // 仅左值对象允许返回内部字符串的引用,避免临时对象调用时返回悬空引用
  std::string& get_name() & { return username; }
  // 右值对象直接返回移动后的字符串,无需拷贝
  std::string get_name() && { return std::move(username); }
  // const对象返回const引用
  const std::string& get_name() const& { return username; }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:03