2012-12-23 19 views
25

Nguyên mẫu hàm thành viên bên dưới nên được diễn giải trong C++ 11 như thế nào?'Tự động a_class :: f (...) -> T const' mơ hồ trong ngữ pháp?

class C { 
public: 
    auto f(...) -> T const; 
} 

Có vẻ như với tôi rằng nó có thể hoặc là một hàm thành viên const của lớp C, hoặc một hàm thành viên không const mà trả về một giá trị const kiểu T.

Tôi biết tôi có thể chỉ cần viết các chức năng như

T const f(...); 

hoặc

T f(...) const; 

Tuy nhiên, tôi muốn trở thành phù hợp với h Tôi tuyên bố chức năng, vì vậy tôi quyết định sử dụng C++ 11 auto f(...) -> RetType mới ở mọi nơi.

Trả lời

29

Loại trả về theo sau là sau cv- và vòng loại của một hàm thành viên không tĩnh. Điều này có nghĩa là ví dụ trong câu hỏi là giống như T const f(...);.

§8.4.1 [dcl.fct.def.general] p2

Các declarator trong một hàm nét sẽ có dạng

D1 (tham số-khai-khoản) cv-qualifier-seq opt ref-vòng loại opt đặc điểm kỹ thuật ngoại lệ chọn thuộc tính-specifier-seq chọn trailing-r eturn kiểu opt

Để khai báo một hàm const thành viên, bạn muốn viết auto f(...) const -> T const;.

+1

+1 (như bạn cần) :-) –

+0

@KerrekSB Tôi tự hỏi mẫu biểu quyết sẽ thay đổi như thế nào nếu tên của những người yêu cầu cũng như trả lời được giữ kín. –

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