初识c++(18)之枚举(enum)、枚举类(enum class/struct)、枚举作为类的成员变量

enum

关于枚举一些基础的认识我就不啰嗦了,这里只写我见到的比较有意思的做法。

对枚举类型的讨论主要都是在作用于上。我就什么也不说都在下面的代码里:

#include
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
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(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(week::Sun)必须进行显性转换。

 枚举作为类的成员变量

这是偶然得到的例子:

#include
using namespace std;

template
class V{
	public:	
	 enum { val = sizeof(T) };
};

int main(){

	cout << V::val << endl;
	return 0;
}

结果:

4

这个操作也是让我瞠目结舌,我也不知道,这样操作的道理是什么,只知道可以这样用,如果你知道请给我留言。

 

你可能感兴趣的:(初识C++系列)