2010-11-08 33 views
10

Saw sau trong một số mã cũ:mặc định Strange constructor cú pháp

class A { 
    &A() { ... } 
} 

gì "&" được sử dụng cho? Nó biên dịch trong VC++ 2008 và trông giống như hàm tạo mặc định, lỗi gcc không biên dịch được.

Trả lời

7

Mặc dù cú pháp & được phép ở vị trí này trong ngữ pháp (đó là một ví dụ về một declarator đó là trình tự: ptr-hành declarator, & là một ptr-hành), ngữ nghĩa nó không có ý nghĩa và không được phép ở đây. Thực tế là nó là hợp lệ hoàn toàn từ một quan điểm ngữ pháp có thể chỉ ra lý do tại sao Visual Studio có thể chấp nhận nó.

Kiểm tra các khả năng, khai báo này trông giống như định nghĩa hàm không có kiểu trả về. 7 [dcl.dcl]/6 nói: "Chỉ trong các khai báo hàm cho các hàm tạo, các trình phá hủy và các kiểu chuyển đổi có thể decl-specifier-seq được bỏ qua". và không có ~ hoặc operator khả năng duy nhất là khai báo hàm tạo.

12.1 [class.ctor]/1 mô tả cú pháp khai báo đặc biệt được sử dụng cho các nhà xây dựng và nó chỉ phải là một chuỗi tùy chọn hàm-specifiers theo sau tên lớp của hàm tạo. Không & hoặc nhà điều hành ptr khác được phép trước tên lớp của nhà xây dựng.

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