enum
是C++中的宏还是变量?我对C++中的宏感到困惑。 C++中macro的定义是什么?
最佳答案
枚举
在c++中,有两种enum
:
这是如何声明它们:
enum Day { sunday, monday, tuesday }; // plain enum
enum class Color { red, green, blue }; // enum class
有什么不同?enums
-枚举器名称{ sunday, monday, tuesday }
与枚举在同一范围内,其值隐式转换为整数和其他类型。enum class
-枚举器名称{ red, green, blue }
是枚举的本地名称,其值不会隐式转换为其他类型(例如另一个enum
或int
)通常接受的是
enum class
比普通的enum
更好,因为它是c++类型系统的一部分,它们不会隐式转换为int
,它们不会污染 namespace ,并且可以进行前向声明。使用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++ - 枚举是C++中的宏还是整数变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60400464/