gpt4 book ai didi

c++ - enum 是 C++ 中的宏变量还是整型变量?

转载 作者:行者123 更新时间:2023-12-02 01:08:35 25 4
gpt4 key购买 nike

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

最佳答案

枚举

在 C++ 中,有两种枚举:

  1. 枚举类
  2. 普通枚举

这是声明它们的方法:

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

有什么区别?

enums - 枚举器名称 { sunday, monday, tuesday } 与 enum 处于相同的范围,并且它们的值隐式转换为整数和其他类型。 p>

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

人们普遍认为,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++ 中,编译器可以内联函数,这比使用宏更好。如果您不仔细定义和使用宏,它们可能会出现问题。

关于c++ - enum 是 C++ 中的宏变量还是整型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60400464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com