函数后面的const &, const &&, &, &&是什么意思?

5

我目前正在查看一些内部基础设施代码,我看到一些函数定义如下:

// func_name is a class member function

some_return_type func_name() & {
  // definition
}

some_return_type func_name() && {
  // definition
}

some_return_type func_name() const& {
  // definition
}

some_return_type func_name() const&& {
  // definition
}

我知道在类成员函数名后添加 const 表示它不会修改定义在类中的不可变成员变量。但是这里的 &&&const &const && 变体是什么意思?


@Frank,你知道这个C++特性叫什么名字吗?我想要谷歌一下来了解一些相关信息,但是不确定该搜索什么名字。 - roulette01
这回答了你的问题吗?"* this"的右值引用是什么? - 康桓瑋
https://dev59.com/tmEh5IYBdhLWcg3w7XPt - M.M
1个回答

9

使用self作为调用方法的对象:

  1. self must match Type&:

    some_return_type func_name() &;
    
  2. self must match Type&& (and will also match Type const&& and Type const&):

    some_return_type func_name() &&;
    
  3. self must match Type const&& (and will also match Type const&):

    some_return_type func_name() const&&;
    
  4. self must match Type const&:

    some_return_type func_name() const&;
    

从上面可以看出,如果C++一开始就引入了引用,并选择使用self引用而不是this指针,那么理解起来会更简单。

Cppreference.com关于引用限定成员函数的说明.


你能引用一下相关的标准吗?它们叫什么名字? - wcochran
我也很想知道这个功能的通用名称。我想更多地了解它。 - roulette01
它不会比ref-qualified成员函数(附带cv-qualified成员函数)更好了。 - Deduplicator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接