c++11 强类型枚举

c++11 强类型枚举

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <vector>
#include <map>

// C++ 11引入了一种新的枚举类型,即“枚举类”,又称“强类型枚举”。声明请类型枚举非常简单,只需要在enum后加上使用class或struct。
enum Old{Yes, No}; // old style
enum class New1{Yes, No}; // new style
enum struct New2{Yes, No}; // new style

void mytest()
{
    /**
     *“传统”的C++枚举类型有一些缺点:
     * 它会在一个代码区间中抛出枚举类型成员(如果在相同的代码域中的两个枚举类型具有相同名字的枚举成员,这会导致命名冲突),
     * 它们会被隐式转换为整型,并且不可以指定枚举的底层数据类型。
     */
    enum Status1{Ok, Error};
    //enum Status2{Ok, Error}; // Err, 导致命名冲突, Status1已经有成员叫Ok, Error

    // 在C++11中,强类型枚举解决了这些问题
    enum class StatusN1 {Ok, Error};
    enum struct StatusN2 {Ok, Error};

    //StatusN1 flagN1 = Ok; // err, 必须使用强类型名称
    StatusN2 flagN2 = StatusN2::Ok;

    enum class C : char {C1 = 1, C2 = 2}; // 指定枚举的底层数据类型
    enum class D : unsigned int { D1 = 1, D2 = 2, Dbig = 0xFFFFFFF0U };
    std::cout << sizeof(C::C1) << std::endl; // 1
    std::cout << sizeof(D::D1) << std::endl; // 4
    std::cout << sizeof(D::Dbig) << std::endl; // 4

    return;
}

int main()
{
    mytest();

    system("pause");
    return 0;
}
时间: 2024-11-05 18:27:38

c++11 强类型枚举的相关文章

Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举

一朋友在微信朋友圈晒了张照片,随手点开大图,带着欣赏的眼光扫了下,恩,几个月不见,又漂亮了...咦?等等,她戴的这是什么?酷炫的造型!金属边框!微型摄像头!这不是传说中的谷歌眼镜么?土豪啊,还好我们已经是朋友了...我先给了她一个赞,然后直奔主题,霸气回复道:我过几天去找你,你戴的是谷歌眼镜吧,哼哼小样,不想死的话...就让我...摸一下下可以么,我不奢求戴,摸一下就满足了...(哎,丢人啊). ------------------- 在cocos2dx 3.0的文档里有这么一句话:以 k 开头

c++11 强类型枚举 enum class

在标准C++中,枚举类型不是类型安全的.枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较.C++03 唯一提供的安全机制是一个整数或一个枚举型值不能隐式转换到另一个枚举别型. 此外,枚举所使用整数类型及其大小都由实现方法定义,皆无法明确指定. 最后,枚举的名称全数暴露于一般范围中,因此C++03两个不同的枚举,不可以有相同的枚举名.(好比 enum Side{ Right, Left }; 和 enum Thing{ Wrong, Right }; 不能一起使用.) C++11 引进

C++11:强类型枚举(enum)

// C++11之前的enum类型是继承C的,不温不火: // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮 // 使用过QT 的都知道,早就应该这么做了,用的非常爽!! // 一.C中enum类型的局限 // 1.非强类型作用域 enum type1{a, b, c}; enum type2{a, d, e}; //问题来了,两种枚举类型都有a枚举常量,并且作用域同样,发生了冲突 //2.同意隐式类型转换 if(type1::a == type2::d){;}

11.使用枚举

//一周七天的枚举 public enum Week { MON,TUE,WED,THU,FRI,SAT,SUN } public class WeekDemo1 { /** * 做什么事情 * */ public void doWhat(int day){ //使用条件判断 if(day>7 || day<1){ System.out.println("参数错误,应在1-7之间"); return; } switch(day){ case 1: case 2: case

C++开发者都应该使用的10个C++11特性

本文由 伯乐在线 - 治不好你我就不是兽医 翻译自 Marius Bancila.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. [感谢冯上(@治不好你我就不是兽医 )的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛.不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备.你也许看到过许多类似介绍各种C++11特性的文章.下面是我总结的,C++开发者都需要学习和使用的C++11

C++11 之 scoped enum

  C++11 枚举类型是“域化的” (scoped enum),相比 C++98 枚举类型的“非域化” (unscoped enum),具有如下优点: 1  命名空间污染  一般来说,声明在花括号内的名字,其可见性限制在由花括号定义的作用域内,但是非域化枚举 (unscoped enum) 却是例外 enum Color { black, white, red }; // black, white, red are in same scope as Color auto white = fal

C++:C++11新特性超详细版(1)

前言: 虽然目前没有编译器能够完全实现C++11,但这并不意味着我们不需要了解,学习它.深入学习C++11,你会发现这根本就是一门新的语言,它解决了c++98中许多遗留下来的问题.早晚会有一天,C++11便会普及大部分编译器.因此,提早做些准备也是应该的. 在此我想做一个关于C++11的专题,将C++11的新特性进行一一讲解,以通俗易懂的语言及例子帮助读者入门C++11.本文便是C++11新特性超详细版系列文章的第一篇, 即C++:[C++11]新特性超详细版(1). 不过我要强调的是,这些文章

《深入理解C++11》要点总结

3.1 继承构造函数 通过using关键字可以继承父类的构造函数.也可以通过显式定义构造函数来阻止继承. 3.2 委派构造函数,减少构造函数的书写 class Info { public: Info() { InitReset(); } Info(int i) : Info() { type = i; } //通过调用无参构造函数,可以减少构造函数内容的重写 Info(char e) : Info() { name = e; } //委派构造函数和初始化列表不能同时存在,使用委派构造函数后,初始

c++11介绍

C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1]  . C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布[2]  ,并于2011年9月出版.2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅编辑上的修正).此次标准为C+