C++11 强枚举类型

C++11 推出的 强类型枚举(enum class) 的主要优势在于提供了更好的类型安全可读性,以及更严格的作用域控制

可以显示指定其底层存储类型,默认为int。(为其他的比如char的话 有什么作用和意义我不太清楚)

示例:

#include 
enum class Color : int{    
    Red,
    Green,
    Blue
};
enum class Car : int{
	Red,
	Green,
	Blue
};

int main() {
	// 1、不会冲突,枚举值都有各自的作用域
    Color color = Color::Red;
	Color Car = Car::Red;
    // 2、不能隐式转换成int
    // int value = color;
    
    if (color == Color::Red) {
        std::cout << "The color is red." << std::endl;
    }
    
    return 0;
}

传统C风格枚举的缺点:

  • 缺乏类型安全性: 可以隐式转换为整数。不同枚举类型的值混淆。比如:

    enum Color {red, green}; 
    enum Car {BMW, Audi};
    
    int main() {
    	Color color = red;
    	Car car = BMW;
    	if (color == car)   // 这个if 是能通过编译的,很离谱	
    	...
    }	
    
  • 全局作用域: 传统的C风格枚举的成员在全局作用域中定义,这可能导致潜在的命名冲突。

    enum Color {Red, Green, Blue};// 第一个文件
    enum Color {Black, White};// 第二个文件
    
    int main() {
        enum Color color = Red; // 编译器不知道Red是哪个枚举的成员,因为有两个名为Color的枚举
        printf("Color: %d\n", color); // 编译错误
    	...
    }
    

    给每个枚举添加命名空间可以解决,但属实非常麻烦

  • 没有底层类型: 传统的C风格枚举没有明确的底层类型,通常默认为int。这可能导致不同编译器和平台之间的兼容性问题,因为int的大小可能会有所不同。

你可能感兴趣的:(c++,算法,开发语言)