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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其包含类型转换、文件操作、异常处理、代码重用等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值