为什么RHR功能不能超载?

时间:2015-01-05 14:21:58

标签: c++ c++11

我可以看到以下内容有用:

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函数执行相同类型的重载。这对于上述访问器来说不太有用,对操​​作员更有用。

1 个答案:

答案 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}}重载,那么您的示例就会有用。