可以显式默认/删除ref限定符上的函数重载
Can explicitly defaulted / deleted functions overload on ref qualifiers?
INTRO
-
Ref限定符:一种消除隐含对象的rl值歧义的方法。作为一个快速的例子,以下面的类为例
class example { int member; public: // ... int& value() &; // ^ int&& value() &&; // ^^ int const& value() const&; // ^ };
使用这个C++11特性(用
^
标记的语法(,可以控制将用调用的value()
的版本- l值
- 临时
- 常量l值
实际上,裁判资格适用于该级别的
*this
-
默认/删除的函数:将特殊成员函数指定为具有编译器生成的(缺省(定义或不可访问(delete。以为例
struct type { type(const type&) = delete; type& operator=(const type&) = delete; };
上述结构,实现了不可复制,具有极其清晰的语义
问题
- 是否可以组合这些功能
- 哪些情况下被明确禁止或风格不好
- 对于这样的组合,是否有用例/模式?(例如,创建基于rl值的条件接口既快捷又简单(
是的,但没有太多用处,因为构造函数和析构函数不能进行ref限定。
您可以引用合格的分配运算符:
struct S {
S &operator=(const S &) && = default;
};
int main() {
S s;
S() = s; // OK
s = S(); // error - LHS must be an rvalue
}
然而,我有点不知所措,无法想象这会有什么用处。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?