C++ 重点笔记 01
const变量
const 定义时初始化
正确初始化示例:
1 2 3 4 5 6 7
| int i = 1;
const int j = i;
const int j = 10;
int n = j;
|
多文件使用
1 2 3 4 5 6 7
|
extern const int buff_size = 512;
extern const buff_size;
|
想在多文件中共享const变量,就要加上extern。
const引用
const引用初始化
1 2 3 4 5 6 7
| const int ci = 1024;
const int &ri = ci;
ri = 42 ;
int &rj = ci;
|
如果int类型引用初始化时赋值为一个double类型的数据,那么编译器会怎么做。
1 2 3
| double i = 3.14;
const int &j = i;
|
这总情况下编译器会创建一个临时变量,如:
1 2 3
| const int temp = i;
const int &j = i;
|
对const的引用可能引用一个并非const的对象
1 2 3 4 5 6 7 8 9
| int i = 42;
int &r1 = i;
const int &r2 = i;
r1 = 0; 合法
r2 = 0; 不合法
|
指针与const
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| const double pi = 3.14;
double *ptr = 3.14;
const double *cptr = &pi ;
*cptr = 0;
int num = 0;
int * const curNum = &num ;
const double pi = 3.14;
const double * const ptr = &pi ;
*ptr = 2.01 ;
*curNum = 12;
|
顶层const
1 2 3 4 5 6 7 8 9 10 11
| int i = 0;
int *const p1 = &i;
const int ci = 42;
const int *p2 = &ci;
const int * const p3 = p2 ;
const int &r = ci;
|
constexpr
常量表达式
1 2 3 4 5
| const int max_files = 20 ;
const int limit = max_files + 1 ;
int staff_size = 20;
|
指针和constexpr
1 2 3 4 5
| const int * p = nullptr; p是一个指向整型常量的指针
constexpr int *q = nullptr; q是一个指向整数常量的指针
constexpr把它定义的对象置为了顶层const
|
1 2 3 4 5
| constexptr int i = 52 ; i是整型常量
constexpr const int * p = & i; p是常量指针 也可以指向一个非常量
constexpr int *p1 = &i; p1是常量指针
|
AUTO
利用auto定义变量编译器会推断并指定变量类型
使用auto也可以在一条语句中声明多个变量,因为一条声明语句只能有一个基本数据类型,所以在该条语句中所有变量的初始基本数据类型都必须一样。
1 2 3
| auto i = 3 , *p = &i; 正确 i是整数类型 *p 是int类型指针
auto sz = 0, pz = 3.14; 错误 sz和pz的数据类型不一样
|
复合类型、常量、auto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int i = 0 ; int &r = i;
auto a = r; a是一个整数 r是i的别名,i是整数
auto一般会忽略掉顶层const
const int ci = 0; &cr = ci;
auto b =ci ; b是一个整数
auto c = cr ;c是一个整数
auto d = &i; d是一个整型指针 ,整数的地址就是指向整数的指针
auto e = &ci; e是一个指向整数常量的指针,对常量对象取地址是一种底层const
|
decltype类型指示符
num的类型是f函数的返回值,在这期间不会调用f函数。