【发布时间】:2016-08-30 09:12:20
【问题描述】:
我只是好奇枚举类是否可以是最终的......因为编译器给了我矛盾的结果。
考虑代码:
#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;
}
使用 Visual Studio 2015 编译器 (http://rextester.com/l/cpp_online_compiler_visual) 编译它可以工作...但是使用 clang (http://rextester.com/l/cpp_online_compiler_clang) 编译它会给我一个错误:
source_file.cpp:3:30: error: expected ';' after top level declarator
enum class some_enums final : char
我在标准中的任何地方都没有看到最终枚举类的踪迹,所以我相信 clang ...但是为什么 Visual Studio 在这种情况下接受它,尽管 MSDN (https://msdn.microsoft.com/en-us/library/2dzy4k6e.aspx) 中没有提到它?
【问题讨论】:
-
final对枚举有什么影响? -
enum class 文档也没有提到它。我怀疑这是一个编译器错误。
-
另请注意,在 C++ 中,类不能从
char等内置类型继承。 -
@Sergey 枚举类不同,底层类型始终是整型。