首页 > 解决方案 > 枚举是 C++ 中的宏还是整数变量?

问题描述

C++ 中是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,优先于 plainenum是因为它是 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++ 中,函数可以由编译器内联,这比使用宏更可取。如果您不仔细定义和使用宏,它们可能会出现问题。


推荐阅读