c++ - C++ 构造函数和右值
问题描述
我正在读这篇文章。注意的代码如下
struct S {
void func() &;
void func() &&;
};
S s1;
s1.func(); // OK, calls S::func() &
S().func(); // OK, calls S::func() &&
我想我明白什么是参考限定词。我的问题更基本:什么是S()
?它是(复制)创建者吗?为什么它是右值?似乎在那个博客和其他地方,它被认为是理所当然的。我错过了什么?
解决方案
形式上它是一个显式转换(功能符号)。它从(可能为空的)参数列表中创建一个临时对象。是的,它通过重载决议来选择正确的构造函数来调用。在这种情况下,默认的 c'tor (由于没有声明其他 c'tor,您的编译器会生成它)。
更正式地说,显式转换是一个表达式,其结果是一个纯右值(纯右值)。因此,在进行重载决策以选择要调用的成员函数时,右值限定版本更可取。
我想这个博客会略过它,因为它自古以来就存在于 C++ 中。这篇文章的目的是介绍一个新概念,假设读者已经了解 C++。
推荐阅读
- jira - Jira Zephyr 与 Webdriver IO 的集成
- python - python中KNN的数据预处理
- optimization - 根据多次转化计算转化“权重”
- javascript - 按钮事件仅选择第一类。(jQuery)
- reactjs - 在 React 中使用通用组件
- python - 用于修改新文件并将修改后的文件添加到另一个目录的 AWS Lambda 函数
- python - 使用 cx_freeze 创建 .msi 时包括 Ghostscript
- python - 数据库表未填充数据(MySQL 连接器/Python)
- python - 是否有没有递归的快速排序的 Python 实现?
- discord - 如何创建公告频道