2013-03-25 22 views
12
class Foo 
{ 
    public: 
     const int x; 
}; 

class Bar 
{ 
    private: 
     const int x; 
}; 

Output:loại truy cập `công khai` và` const`ness. '-Wuninitialized`

test.cpp:10:13: warning: non-static const member ‘const int Bar::x’ in class without a constructor [-Wuninitialized] 

Tại sao Bar tạo ra một cảnh báo nhưng Foo không (rõ ràng là vì tiếp cận vòng loại, nhưng logic là gì?).

+0

Đây có phải là toàn bộ chương trình không? –

+0

Đây là MWE hoàn chỉnh mà tôi đã biên dịch. – aiao

Trả lời

12

Với những định nghĩa, kể từ Foo::x là công khai, bạn có thể nhanh chóng hợp lệ một Foo với một cái gì đó như:

Foo f { 0 }; // C++11 

hoặc

Foo f = { 0 }; 

Bạn không thể làm điều đó cho một Bar.

+0

Đó là một số cú pháp bất thường (đối với tôi ít nhất). Bạn có thể vui lòng cung cấp tài nguyên không. – aiao

+3

@aiao Đầu tiên là cú pháp mới trong C++ 11 (thường được đặt tên kém [khởi tạo đồng bộ] (http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)) và tương đương với số thứ hai. Cả hai, trong trường hợp này, thực hiện khởi tạo tổng hợp (§8.5.1 của C++ 11). –