C++中的const修饰的,是一个真正的变量,而不是C中变量(只读)。在const修饰的常量编译期间,就已经确定下来了。
下面这段代码展示的是const可以完成和#define一样的(对比你也看到了,不用const关键字而只用int变量是不能被编译器通过的)
#include <iostream>
using namespace std;
#define c (20)
int main()
{
int a = 10;
int b = 20;
//**************************************************************************
char arr[a+b] = {0};
// 需要注意的一点!!!
// C和C++编译器都不支持变量做数组下标,
// 但是在Linux内核中可以通过编译。
// 为了养成好的代码习惯:不要用这种虽然通过但是不规范的写法!!!
//**************************************************************************
//
const int d = 20;
const int e = 10;
// 下面这句话在C/C++编译器中都可以通过
char arr2[d+e] = {0};
// 下面这句话在C/C++编译器中都可以通过
char arr3[c+d] = {0};
return 0;
}
理解加深,C++中的关键字const和宏定义#define的不同之处在于二者的工作方式:
- const常量由 编译器处理,提供类型检查和作用于检查;
- |#define 由预处理器处理,单纯的文本替换。
#include <iostream>
using namespace std;
void fun1()
{
#define a 10
// #undef a
const int b = 20;
}
void fun2()
{
printf("a = %d\n", a);
printf("b = %d\n". b);
}
int main()
{
fun1();
fun2();
return 0;
}
通过代码结果我们可以看到:
- |#define的作用域是由#undef来确定的,且#define不受函数作用域的限制;
- const int b 的作用域就在fun1()内部,无法在别的地方直接使用。