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 }是枚举的本地名称,其值不会隐式转换为其他类型(例如另一个enumint)
    通常接受的是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/

    10-11 22:54
    查看更多