2015-01-05 25 views
7

tôi có thể thấy một cái gì đó như sau là hữu ích:Tại sao các chức năng RHR không bị quá tải?

class A { 
public: 
    const vector<int>& vals() const { 
     return val; 
    } 

    vector<int> vals() && { 
     return std::move(val); 
    } 
private: 
    vector<int> val; 
} 

Nhưng tôi nhận được một lỗi biên dịch với g ++:

error: ‘vector<int> A::vals() &&’ cannot be overloaded 

tôi sẽ nghĩ rằng bạn muốn có thể làm cùng một loại quá tải mà bạn có thể thực hiện với các chức năng const. Điều này sẽ ít hữu ích hơn cho người truy cập ở trên và hữu ích hơn cho các nhà khai thác.

+2

Không có hàm 'foo' trong lớp của bạn ..? –

+0

Bạn không thể quá tải thứ gì đó với * vòng loại * với thứ gì đó không có. –

+0

@ AndréCaron xin lỗi đã sao chép lỗi từ một thử nghiệm mà tôi đã làm. Sửa lỗi. – IdeaHat

Trả lời

11

Lý do là C++ 11 13.1/2:

...

  • tờ khai chức năng thành viên có cùng tên và cùng tham số kiểu-list - như cũng như thành viên tuyên bố mẫu chức năng có cùng tên, cùng một thông số kiểu danh sách, và cùng một danh sách tham số mẫu không thể bị quá tải nếu có, nhưng không phải tất cả, có ref-qualifier (8.3.5).

    [Ví dụ:

    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 
    }; 
    

    dụ -end]

Nói cách ohter, ví dụ bạn có thể làm việc nếu bạn thêm một ref-vòng loại đến const quá tải của vals().

Các vấn đề liên quan