enum是C++中的宏变量还是整数变量

Is enum a macro or integer variable in C++?

本文关键字:变量 整数 C++ enum      更新时间:2023-10-16

enum是C++中的宏还是变量?我对C++中的宏感到困惑。C++中宏的定义是什么?

枚举

在c++中有两种类型的enum:

  1. 枚举类
  2. 普通枚举

这是如何声明它们的:

enum Day { sunday, monday, tuesday };  // plain enum
enum class Color { red, green, blue }; // enum class

有什么区别?

enums-枚举器名称{ sunday, monday, tuesday }与枚举在同一范围内,它们的值隐式转换为整数和其他类型。

enum class-枚举器名称{ red, green, blue }是枚举的本地名称,它们的值不会隐式转换为其他类型(如另一个enumint(

人们普遍认为enum class比普通enum更可取,因为它是c++类型系统的一部分,它们不会隐式转换为int,不会污染命名空间,并且可以正向声明。使用enum class可以保护您免受普通enum中可能出现的一些错误的影响。

宏是完全不同的东西。宏由预处理器使用,预处理器是一个在编译之前处理源代码的程序。宏是程序中的一段代码,它被赋予了一些名称。每当编译器遇到此名称时,编译器都会将该名称替换为实际的代码段。#define指令用于定义宏。例如:

#include <iostream> 

// macro definition 
#define LIMIT 5 
int main() 
{ 
for (int i = 0; i < LIMIT; ++i)
{ 
std::cout << i << "n"; 
}  
} 
0
1
2
3
4

宏的作用也可以类似于函数

#include <iostream> 

// macro with parameter 
#define AREA(l, b) ((l) * (b)) 
int main() 
{ 
int a = 10, b = 5, area; 

area = AREA(a, b); 

std::cout << "Area of rectangle is: " << area; 
} 
Area of rectangle is: 50

宏被预处理器替换,因此没有函数调用。这可以使代码运行得更快,然而,在c++中,函数可以由编译器内联,这比使用宏更可取。如果不仔细定义和使用宏,它们可能会出现问题。