【发布时间】:2018-01-06 09:28:30
【问题描述】:
我刚刚发现 gcc 和 clang++ 可以让我使用 const int 作为枚举的基础类型。我想知道这是否有任何效用 if 对于所有目的它与基于int 的枚举相同。
我认为这可能会使枚举实例不可分配,但事实并非如此。 (老实说,我认为它不会以与您无法从 const 基类型class C2 : const C1{} 派生的类相同的方式编译)
enum : int 和 enum : const int 之间有什么用处或细微差别吗? 如果没有,为什么编译器会允许?
例子:
#include<iostream>
enum A : const int{ // is this the same as enum A : int ?
no = 0,
si
};
int main(){
A a;
a = si; // is asignable
a = no; // twice
std::cout << (int)a << std::endl; // prints '0'
return 0;
}
有趣的是,我也能做到这一点enum A : volatile int。
(幸运的是,我不能这样做enum A : int& 或enum A : int*。)
【问题讨论】:
-
如果
const将被忽略,我认为它允许const的唯一原因是支持泛型编程——所以如果有一个包含这样的枚举类的模板类型,即使模板参数是const,它也会起作用。但是程序员也可以很容易地写std::remove_const_t,所以没有太大区别......