首页 > 解决方案 > C++ 构造函数和右值

问题描述

我正在读这篇文章。注意的代码如下

struct S {
  void func() &;
  void func() &&;
};

S s1;
s1.func(); // OK, calls S::func() &
S().func(); // OK, calls S::func() &&

我想我明白什么是参考限定词。我的问题更基本:什么是S()?它是(复制)创建者吗?为什么它是右值?似乎在那个博客和其他地方,它被认为是理所当然的。我错过了什么?

标签: c++c++11constructorrvalue

解决方案


形式上它是一个显式转换(功能符号)。它从(可能为空的)参数列表中创建一个临时对象。是的,它通过重载决议来选择正确的构造函数来调用。在这种情况下,默认的 c'tor (由于没有声明其他 c'tor,您的编译器会生成它)。

更正式地说,显式转换是一个表达式,其结果是一个纯右值(纯右值)。因此,在进行重载决策以选择要调用的成员函数时,右值限定版本更可取。

我想这个博客会略过它,因为它自古以来就存在于 C++ 中。这篇文章的目的是介绍一个新概念,假设读者已经了解 C++。


推荐阅读