C++中的常量

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语言的学习中已经讲解过,这里不再讲解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值