enum
关于枚举一些基础的认识我就不啰嗦了,这里只写我见到的比较有意思的做法。
对枚举类型的讨论主要都是在作用于上。我就什么也不说都在下面的代码里:
#include<iostream>
using namespace std;
int main(){
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
cout << Sun << endl;
cout << week::Sun << endl;
int Sun;//这句是错误的,因为枚举类型已经占用了Sun这个关键字啦,不能再使用了
return 0;
}
enum class
enum class (enum struct)这两种写法是等效的。上面的写法的缺点就是我们定义的枚举类型并没有将其内容保护起来,可以在外部随意调用,因此c++11就出现了enum class这种枚举类。
还是都在代码里:
#include<iostream>
using namespace std;
int main(){
enum class week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum class week1:unsigned int {Sun, Mon, Tue, Wed, Thu, Fri, Sat};//指定枚举的底层类型
cout << static_cast<int>(week::Sun) << endl;
int Sun;//这句话是对的,enum class解决了域的问题
return 0;
}
解释:
---对枚举内容的引用,必须加上域名week::Sun,这样增加了安全性。
---enum class week1:unsigned int {Sun, Mon, Tue, Wed, Thu, Fri, Sat};可以指定枚举类型的底层类型。
---static_cast<int>(week::Sun)必须进行显性转换。
枚举作为类的成员变量
这是偶然得到的例子:
#include<iostream>
using namespace std;
template<typename T>
class V{
public:
enum { val = sizeof(T) };
};
int main(){
cout << V<int>::val << endl;
return 0;
}
结果:
4
这个操作也是让我瞠目结舌,我也不知道,这样操作的道理是什么,只知道可以这样用,如果你知道请给我留言。
这篇博客介绍了C++中的枚举类型,包括基础的enum,增强了安全性的enum class(enum struct),以及枚举作为类的成员变量的使用。通过代码示例展示了enum class如何限定枚举值的访问,并指定了底层类型。同时,提到了将枚举作为类成员时的一个令人惊讶的操作,但未解释其原理,邀请读者留言探讨。
1457





