- const
const表示变量是只读不可改变的,需要注意的几点如下:
1、首先变量必须初始化
const int i=get_size();//运行时初始化
const int j=42;//编译时初始化
2、仅在本文件有效,若需跨文件则需要加入extern关键字。只在一个文件定义const,而在其他多个文件中声明并使用(???不懂不是直接include头文件就可以)
3、顶层const修饰算数类型、类、指针本身。而底层const与指针与引用等复合类型有关。
例如`int i=10;const int *p=&i;//const为底层 int *const q=&i;//顶层const
- constexpr
C++11新标准规定,可以将变量声明为constexpr类型由编译器来验证变量的值是否为一个常量表达式,即声明为constexpr的变量必须用常量表达式初始化。包括编译和运行初始化。
1、即函数赋值必须为constexpr函数
2、constexpr修饰指针时为顶层const
constexpr int *q=nullptr;//q是一个指向整数的常量指针
- 测试const和constexpr与c++ primer5不同的地方
无论vs2017和ubuntu16.04 以下都会报错 “const int *” 类型的值不能用于初始化 “int *const” 类型的实体
”
const int m = 0;constexpr int *p = &m; int *const q = &m;
`