“static const” vs “#define” vs “enum” ?


“static const”

“static const” 基本上是 static(存储说明符)和 const(类型限定符)的组合。

static 决定变量的生命周期和可见性/可访问性。这意味着,如果一个变量被声明为静态变量,它将在程序运行的整个时间内保留在内存中,而普通的或自动变量在函数(变量定义所在的位置)结束时会被销毁。

const 是一个类型限定符。类型限定符用于通过类型系统表达有关值的附加信息。当使用 const 类型限定符初始化变量时,它将不再接受值的更改。

因此,结合 static 和 const,我们可以说,当使用 static const 初始化变量时,它将保留其值直到程序执行结束,并且它也不会接受任何值的更改。

示例

#include<iostream>
using namespace std;
int main(){
int input = 10;
static const int value = 5;
input += value;
cout << input;
return 0;
}

“#define”

预处理器命令称为指令,以井号或哈希符号 (#) 开头。井号 (#) 前不应出现空格,末尾不需要分号。

预处理阶段可以执行许多操作,包括:

  • 通过 #include 指令包含其他文件

  • 通过 #define 指令定义符号常量和宏

通过一些预处理器指令,您还可以有条件地编译或执行一些预处理器指令。

注意 - C++ 程序的预处理阶段发生在程序编译之前。C++ 预处理器是在编译源代码之前执行的程序。

您已经学习了如何使用 #include 预处理器指令在程序中包含所需的标头文件。本讨论专门针对 #define 预处理器指令。

#define 预处理器允许我们定义符号名称和常量。例如:

#define PI 3.14159

此语句将程序中 PI 的每次出现都转换为 3.14159。

C++ #define 示例

现在考虑一个完整的示例,其中 PI 的每次出现都将替换为 3.14159,该值由 #define 指令定义。

Input: PI 3.14159
Output: Area of Circle 314.15

示例

#include<iostream>
using namespace std;
#define PI 3.14159
int main() {
   int r = 10;
   float cir;
   cir = PI * (r * r);
   cout<<"Area of Circle: "<<cir<<endl;
}

“enum”

enum 是用户定义的数据类型,我们为变量指定一组值,并且变量只能取一小组可能值中的一个。我们使用 enum 关键字来定义枚举。

enum direction {East, West, North, South}dir;

这里的枚举名称是 direction,它只能取四个指定值中的一个,声明末尾的 dir 是一个枚举变量。

让我们来看一个简单的例子来理解这一点

在这里,我将值 West 赋值给枚举变量 dir,当我显示 dir 的值时,它显示 1。这是因为默认情况下,值按从 0 开始的递增顺序排列,这意味着 East 是 0,West 是 1,North 是 2,South 是 3。

Input: direction {East, West, North, South} dir=West
Output: 1

示例

#include<iostream>
using namespace std;
enum direction {East, West, North, South} dir;
int main(){
   dir = West;
   cout<<dir;
   return 0;
}

另一种声明枚举变量的方法

正如我们在上面的例子中看到的,我已经在枚举声明期间声明了枚举变量 dir,还有一种方法可以声明枚举变量。

示例

#include <iostream>
using namespace std;
enum direction {East, West, North, South};
int main() {
   direction dir;
   dir = South;
   cout<<dir;
   return 0;
}

输出

3

为什么在 C++ 中使用 enum

现在我们了解了什么是 enum 以及如何在程序中使用它们,让我们讨论一下我们为什么要使用它们

只有当我们期望变量具有可能值集之一时才使用枚举,例如,我们有一个保存方向的 dir 变量。由于我们有四个方向,此变量可以取四个值中的任何一个,如果我们尝试为此变量分配另一个随机值,则会引发编译错误。这增加了编译时检查并避免了传递无效常量时发生的错误。

另一个经常使用它们的重要位置是 switch case 语句,其中 case 块期望的所有值都可以在 enum 中定义。这样,我们可以确保传递到 switch 括号中的 enum 变量不会取任何它不应该接受的随机值。

更新于:2019年8月20日

5000+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告