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ì?
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ì?
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.
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.
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
@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 {};'. –
Tương tự như làm 'const int;' hoặc tương tự như tôi sẽ tưởng tượng. – chris
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 {/ * ... * /};'. –
Lỗi MSVC liên quan: [MSVC const enum type] (http://stackoverflow.com/q/14923403) –