Tôi chỉ tò mò liệu một lớp enum có thể là cuối cùng hay không ... vì các trình biên dịch đang cho tôi kết quả mâu thuẫn.Lớp enum cuối cùng trong C++ 11
xem xét mã:
#include <iostream>
enum class some_enums final : char
{
a = 'a',
b = 'b',
c = 'c'
};
int main()
{
some_enums aa = some_enums::a;
std::cout << "aa=" << static_cast<char>(aa) << std::endl;
}
Biên dịch này với Visual Studio 2015 biên dịch (http://rextester.com/l/cpp_online_compiler_visual) hoạt động ... Tuy nhiên biên dịch nó với kêu vang (http://rextester.com/l/cpp_online_compiler_clang) mang lại cho tôi một lỗi:
source_file.cpp:3:30: error: expected ';' after top level declarator
enum class some_enums final : char
tôi đã thấy không có dấu vết của lớp enum cuối cùng bất cứ nơi nào trong tiêu chuẩn vì vậy tôi cho tín dụng để kêu vang ... Tuy nhiên tại sao Visual Studio chấp nhận nó trong trường hợp này mặc dù nó không được đề cập trong MSDN (https://msdn.microsoft.com/en-us/library/2dzy4k6e.aspx)?
và tác động của 'final' sẽ có trong enum? – bolov
[enum class] (https://msdn.microsoft.com/en-us/library/a6cskb49.aspx) tài liệu cũng không đề cập đến nó. Tôi nghi ngờ rằng đây là lỗi trình biên dịch. – user2079303
Cũng lưu ý rằng trong C++ một lớp không thể được kế thừa từ các kiểu dựng sẵn như 'char'. – Sergey