文章目录
前言
在[C++常量(1)][]中,我们初步了解了字面常量,在这篇文章中,我们会对定义常量进行介绍
七、定义常量
定义常量有两种方式:
- 使用
const
关键字; - 使用
#define
预处理器.
八、#define预处理器
下面是#define
的标准形式:
#define identifier value
实例 :
#include <iostream>
using namespace std;
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main()
{
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
运行结果:
50
我们会在后面详细讲述该预处理器。
九、const关键字
我们可以在定义变量时使用const
关键字定义常量:
const type variable = value;
实例:
#include <iostream>
using namespace std;
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
运行结果:
50
注意:将常量定义为大写字母形式是一个不错的习惯。
十、#define
和const
的区别
1.类型与安全检查
#define
宏定义是通过字符替换实现的(我们以后会讲到)没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const
则是常量声明,有类型区别,需要在编译阶段进行类型检查。
2.编译器处理不同
- 宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期与编译时期一样长;
- const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据。
3.存储方式不同
- 宏定义是直接替换,不会分配内存,存储与程序的代码段中;
- const常量需要进行内存分配,存储与程序的数据段中。
4.定义域不同
#define
时在编译阶段进行,所以不受定义域限制;const
则不然:
void func1(){
#define N
const int n;
}
void func2(){
std::cout<<N<<endl//正确
<<n<<endl;//报错
}
5.能否取消
#define
宏可以通过#undef
取消;const
常量不能取消- 实例:
void f1()
{
#define N 12
const int n = 12;
#undef N //取消宏定义后,即使在f1函数中,N也无效了
#define N 21//取消后可以重新定义
}
十一、总结
在这一篇,我们初步了解了定义常量的方式,下一章,我们将会了解 底层const 和 顶层const 的区别与联系.