概述
这里是引用
部分参考来自:https://www.cnblogs.com/MCSFX/p/11298183.html
开发工具:Visual Studio 2019
系统环境:Windows 10 专业版
常量:值不能改变
变量:值可以改变
不能重名
不能和C/C++语言里的关键字重名
必须是字母或者字母和数字的组合,符号仅“_”可以使用
命名规范
//预处理
#include <iostream>
#define cl 775
int main()
{
const int clconst{775};
int val {0};//变量
}
变量的定义方式
这里是引用
类型 名字 {初始值} 或者 类型 名字=初始值
常量的定义方式
直接使用值
const 类型 名字{初始值}
类型 const 名字{初始值}
#define 名字 值
区别
这里是引用
定义:const命名常量时带数据类型,而#define命名常量时不带类型。
在什么时候起作用:const在编译、运行的时候起作用,而#define是在预处理阶段起作用。
起作用的方式: define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 正因为define只是简单的字符串替换会导致边界效应,具体举例可以参考下面代码
加深const和#define的区别
//预处理
#include <iostream>
#define cl 2+2
int main()
{
std::cout << cl / 2 << "\n";
//按照常理应该是cl=4/2=2,但是这里表达的是2+2/2=3
}
其他
从代码调试的方便程度而言: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了
从是否可以再定义的角度而言: const不足的地方,是与生俱来的,const不能重定义,而#define可以通过#undef取消某个符号的定义,再重新定义。
从某些特殊功能而言: define可以用来防止头文件重复引用,而const不能,可以参看下面代码:
//主要把以下代码放在头文件中,可以防止头文件被重复引用
#ifndef xxx//如果没有定义xxx
#define xxx//定义xxx
//这里是你的代码
.#endif //结束如果1234567