07 C++中的常量及其定义

系列文章目录

07 C++中的常量及其定义


目录

系列文章目录

文章目录

前言

二、常量的定义

1.使用 const 关键字定义常量

2.使用 #define 预处理器定义常量

3.宏定义 #define 和常量 const 的区别

3.1类型和安全检查不同

3.2 编译器处理不同

3.3 存储方式不同

3.4 定义后能否取消

3.5 是否可以做函数参数

3.6 指针 

三、常量实例

总结


前言

C++中的常量是不变的值,它们在程序运行期间不能被修改。

常量可以是字面值(literal),也可以是通过定义常量来创建的符号常量。

字面值常量可以是整型常量、浮点型常量、字符常量、布尔型常量和空指针常量。


一、字面值常量

  1. 整型常量:整型常量是指值为整数的常量,例如1、2、3等。整型常量可以有不同的表示方式,如十进制、八进制、十六进制等。

  2. 浮点型常量:浮点型常量是指值为浮点数的常量,例如1.0、2.5、3.14159等。浮点型常量可以用科学计数法表示,如1.23E-4。

  3. 字符常量:字符常量是指值为字符的常量,例如'A'、'B'、'c'等。字符常量用单引号括起来。

  4. 布尔型常量:布尔型常量是指值为真或假的常量,例如true、false。布尔型常量可以用于逻辑表达式的求值。

  5. 空指针常量:空指针常量是指不指向任何对象的指针常量,通常用NULL或nullptr表示。空指针常量在编程中常用于初始化指针,或判断指针是否为空。、

二、常量的定义

在 C++ 中,有两种简单的定义常量的方式:

  • 使用 const 关键字。
  • 使用 #define 预处理器。

1.使用 const 关键字定义常量

下面是使用 const 关键字。进行常量定义。

const type variable = value;

const int MAX_SIZE = 10;
const float PI = 3.1415926;
const char NEWLINE = '\n';
const bool TRUE = true;
const int* const NULL_POINTER = nullptr;
 

2.使用 #define 预处理器定义常量

下面是使用 #define 预处理器。进行常量定义。

#define identifier valu

#include <iostream>
using namespace std;
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'
 
int main()
{
 
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area << endl;
   cout << NEWLINE << endl;
   return 0;
}

输出结果为50;

3.宏定义 #define 和常量 const 的区别

3.1类型和安全检查不同

宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;

const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查

3.2 编译器处理不同

宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期;

const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据

3.3 存储方式不同

宏定义是直接替换,不会分配内存,存储于程序的代码段中;

const常量需要进行内存分配,存储于程序的数据段中

3.4 定义后能否取消

宏定义可以通过#undef来使之前的宏定义失效

const常量定义后将在定义域内永久有效

void f1()
{
  #define N 12
  const int n = 12;

  #undef N //取消宏定义后,即使在f1函数中,N也无效了
  #define N 21//取消后可以重新定义
}

3.5 是否可以做函数参数

宏定义不能作为参数传递给函数

const常量可以在函数的参数列表中出现

 预处理 #define 变量定义值以后,不能用分号,否则就会计算错误,但是程序不会报错。

3.6 指针 

1、const 关键字出现在 * 的左边:指针指向的内容不能被修改。

2、const 关键字出现在 * 的右边:指针本身不能被修改。

3、const 关键字出现在 * 的两边:指针指向的内容和指针本身都不能被修改。

可以这样简单的来理解:

const *p; //修饰*p,指针指向的对象不可变
* const p; //修饰p,指针不可变
const * const p; //第一个修饰了*p,第二个修饰了p,两者都不可变

 

三、常量实例

已知半径,求圆的周长和面积。

#include<iostream>   
using namespace std;

#define PI 3.14

int main()
{
    float radius = 10.0;
    float area = PI * radius * radius;
    float circumference = 2 * PI * radius;
    cout << "area is "<<area <<", circumference is "<< circumference<<endl;
    return 0;
}

输出结果:

area is 314, circumference is 62.8


总结

  • 定义常量, const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型。
  • 起作用的阶段,#define 是在编译的预处理阶段起作用,而 const 是在 编译、运行的时候起作用。
  • 起作用的方式,#define 只是简单的字符串替换,没有类型检查。而 const 有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 正因为 define 只是简单的字符串替换会导致边界效应.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值