2013-07-23 36 views
12

tôi thấy cấu trúc này trong dự án tôi làm việc:Tại sao một khai báo enum được đánh dấu const?

const enum SomeEnum 
{ 
    val0, 
    val1, 
    val2 
}; 

mục đích const ở đây là gì?

+0

Tôi tin rằng đây là mã C++ không hợp lệ nhưng Visual Studio chấp nhận nó (GCC không). Ngoài ra Visual Studio cũng chấp nhận 'const class A {/ * ... * /};'. –

+0

Lỗi MSVC liên quan: [MSVC const enum type] (http://stackoverflow.com/q/14923403) –

Trả lời

13

Không có gì cả. Trên thực tế, theo G ++, đó là lỗi trình biên dịch:

error: qualifiers can only be specified for objects and functions 

Tuy nhiên, trong C nó được phép, nhưng vô dụng. GCC nói:

warning: useless type qualifier in empty declaration 

Vấn đề là const chỉ áp dụng cho đối tượng (biến) và chức năng thành viên, nhưng không áp dụng cho các loại cơ bản.

8

Nó không tạo sự khác biệt trong mã của bạn, nhưng nó sẽ trong trường hợp này:

const enum SomeEnum 
{ 
    val0, 
    val1, 
    val2 
} VAL0 = val0; 

Ở đây, VAL0 sẽ là một biến const (với giá trị val0). Mặc dù vậy, TBH không được sử dụng nhiều.

+4

Tôi nghĩ rằng nó * làm * tạo sự khác biệt: "nó không nên biên dịch". – Nawaz

+0

@Nawaz Tôi thấy rằng nó không biên dịch, tuy nhiên đó có thể chỉ là trình biên dịch. Có bất cứ điều gì trong các quy tắc chống lại nó? Tôi đã nhìn thấy các trình biên dịch cả chấp nhận và từ chối 'static struct X {};'. –

+1

Tương tự như làm 'const int;' hoặc tương tự như tôi sẽ tưởng tượng. – chris

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