C++中的常量
在C语言的学习中,我们已经介绍了变量和常量的内容,但是在C++中关于常量却有了新的特性,因此下面九江讲解C++中的常量
所谓常量是指不能修改值的量
在C++中,常量可以是以下形式
- 字面常量
- 关键字const声明的常量
- 关键字constexpr声明的常量表达式(C++11新增的特性)
- 关键字enum中声明的枚举常量
- 使用#define定义的常量(不推荐使用)
字面常量
字面常量是指我们源代码中所出现的任何的常量,它可以是任何类型,例如
#include <iostream>
//导入命名空间
using namespace std;
//主程序
int main(){
int num = 10;
cout << "Hello World !" << endl;
return 0;
}
在上面的程序中,我们声明了一个变量num并将其初值赋为10,10是代码的一部分,被编译到最终的二进制程序中,是无法修改的,因此10是一个字面常量
其次,我们输出了Hello World !
,同样Hello World !
作为程序的一部本被编译入二进制文件,是无法修改的常量,因此也是一个字面常量
实际上在C++中,允许用户定义自己的字面常量,例如37.5_C(摄氏度),97.0_F(华氏度)
这些后缀被编译器视为用户自己定义的字面常量,这一点将在后面讲解
关键字const声明常量
我们可以对任意一个变量使用const关键字来声明其为一个常量,那么在接下来的程序中,任何为该变量重新赋值的语句都不会被允许,否则会报错
并且我们使用const关键字声明一个常量的时候,必须为其赋予初值,否则将会报错
使用const关键字的最大的好处就是将常量与标识名关联了起来,这样便于引用与查找错误
例如
#include <iostream>
//导入命名空间
using namespace std;
int main(){
const int num_1=10;
return 0;
}
这里我们申明了一个常量num_1并在开始为其赋予了初值10
关键字constexpr声明常量表达式
使用关键字constexpr使得常量的声明类似与一个函数,而且必须放在主函数外
#include <iostream>
//导入命名空间
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
int main(){
return 0;
}
使用常量表达式的好处就是为程序的优化提供了可能性
如果我们以下面的方式声明一个变量
double Pi=22.0 / 7;
那么在我们每次引用Pi的时候,编译器都会重新计算22.0 / 7的值,这样就造成了性能的开销
使用常量表达式定义的变量,编译器只会在定义的时候进行一次计算,在引用的时候就会将变量名直接替换为该值
此外,我们还能在另外一个常量表达式中引用另外一个常量表达式
#include <iostream>
//导入命名空间
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
constexpr double GetDoublePi() { return 2*GetPi(); }
int main(){
return 0;
}
我们调用常量表达式和函数类似
#include <iostream>
//导入命名空间
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
constexpr double GetDoublePi() { return 2*GetPi(); }
int main(){
cout << GetPi() << endl;
cout <<GetDoublePi() << endl;
return 0;
}
>>>
3.14286
6.28571
最后,常量表达式并不一定能够实现程序优化,例如定义的常量表达式是返回用户输入的数字的两倍,这样的话,由于编译器无法提前预知用户的输入,因此是无法提前编译实现优化的
关键字enum声明的枚举常量
在C语言的学习中,我们讲解了使用enum关键字定义枚举体以及如何使用枚举变量。
我们使用enum关键字定义一个枚举体的本质是将一些常量关联起来,而定义的枚举体实际上是一种新的数据类型,只不过取值限定在我们所指定的范围内
因此,在枚举体中列出的量实际上也是常量,我们能够使用与值关联的标识名来获取值
#include <iostream>
//导入命名空间
using namespace std;
enum Workday{
Monday=1,
Tuesday=2,
Wednesday=3,
Thurday=4,
Friday=5,
Saturday=6,
Sunday=7
};
int main(){
cout << "Monday = " << Monday <<endl;
cout << "Sunday = " << Sunday <<endl;
return 0;
}
此外,如果我们像为一个变量赋值为枚举体中的值,该变量必须为该枚举型变量
#include <iostream>
//导入命名空间
using namespace std;
enum Workday{
Monday=1,
Tuesday=2,
Wednesday=3,
Thurday=4,
Friday=5,
Saturday=6,
Sunday=7
};
int main(){
Workday day_1=Monday;
Workday day_2=Sunday;
cout << "Monday = " << day_1 <<endl;
cout << "Sunday = " << day_2 <<endl;
return 0;
}
使用define定义的常量
使用define定义的常量在c语言的学习中已经讲解过,这里不再讲解