我可以看到以下内容有用:
class A {
public:
const vector<int>& vals() const {
return val;
}
vector<int> vals() && {
return std::move(val);
}
private:
vector<int> val;
}
但是我用g ++得到了一个编译器错误:
error: ‘vector<int> A::vals() &&’ cannot be overloaded
我认为您可以使用const
函数执行相同类型的重载。这对于上述访问器来说不太有用,对操作员更有用。
答案 0 :(得分:11)
原因是C ++ 11 13.1 / 2:
...
具有相同名称和相同 parameter-type-list 的成员函数声明 - 以及成员 函数模板声明具有相同的名称,相同的参数类型列表, 如果模板参数列表中的任何一个(但不是全部)具有 ref-qualifier (8.3.5),则不能重载模板参数列表。
[示例:
class Y { void h() &; void h() const &; // OK void h() &&; // OK, all declarations have a ref-qualifier void i() &; void i() const; // ill-formed, prior declaration of i // has a ref-qualifier };
- 示例]
换句话说,如果您将{em> ref-qualifier 添加到const
的{{1}}重载,那么您的示例就会有用。