2012-02-24 39 views
6
class A{ 
    private: 
     string a; 
    public: 
     A():a("hello world"){}; 
     A(const string & arg):a(arg){}; 
     void put()const{cout<<a;}; 
}; 

A aaa(); 
A bbb; 

Vì vậy, sự khác nhau giữa A aaa();A bbb;aaa một hàm?khác biệt giữa A aaa; và A aaa();

+0

có tùy chọn thứ 3. gọi hàm dựng một cách rõ ràng. Aaa = A(); –

+0

có thể trùng lặp của [Tại sao nó là một lỗi để sử dụng một bộ trống của dấu ngoặc đơn để gọi một constructor không có đối số?] (Http://stackoverflow.com/questions/180172/why-is-it-an-error-to -use-an-empty-set-of-brackets-to-call-a-constructor-with-no) –

Trả lời

11

Có, câu đầu tiên được hiểu là khai báo hàm. Nó được gọi là Most Vexing Parse.

+1

'A aaa();' không phải là một ví dụ về "phân tích cú pháp gây tranh cãi nhất". Các phân tích cú pháp gây tranh cãi nhất đề cập đến khi bạn cố gắng delcare một đối tượng và vượt qua một initializer giá trị tạm thời cho tất cả các tham số constructor của nó. ví dụ. 'B c (D());' –

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