“静态常量”与“ #define”与“枚举”?
“静态常量”
“静态const”基本上是static(存储说明符)和const(类型限定符)的组合。
静态变量确定变量的生存期和可见性/可访问性。这意味着,如果将变量声明为静态变量,则它将在程序运行时始终保留在内存中,而当函数(定义了变量的地方)结束时,普通或自动变量将被破坏。
const是类型限定符。类型限定符用于通过类型系统表达有关值的附加信息。当使用const类型限定符初始化变量时,它将不接受其值的进一步更改。
因此,将static和const结合使用,可以说,当使用staticconst初始化变量时,它将保留其值直到程序执行为止,并且也将不接受其值的任何更改。
示例
#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预处理程序允许我们定义符号名称和常量。例如,
#定义PI3.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 direction {East, West, North, South}dir;
这里的Enumeration名称是direction,它只能采用四个指定值之一,声明末尾的dir是一个enum变量。
让我们举一个简单的例子来理解这一点:
在这里,我为枚举变量dir分配了值West,当我显示dir的值时它显示为1。这是因为默认情况下,值从0开始按升序排列,这意味着East为0,West为1,North是2,南方是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++中使用枚举
现在我们了解了什么是枚举以及如何在程序中使用它们,让我们讨论为什么使用它们:
仅当我们期望变量具有一组可能的值时才使用枚举,例如,我们有一个dir变量来保存方向。由于我们有四个方向,因此该变量可以采用四个值中的任何一个,如果我们尝试为该变量分配另一个随机值,则会引发编译错误。这增加了编译时检查,并避免了由于传入无效常量而导致的错误。
经常使用它们的另一个重要地方是switchcase语句,case块期望的所有值都可以在枚举中定义。这样,我们可以确保在切换括号中传递的枚举变量不会采用任何它不应该接受的随机值。