关于C++ const 的全面总结
C++ const 和 constexpr 的区别?
- 常量必须初始化,一旦初始化后就不能被修改
普通常量
//普通常量定义,必须初始化
int const a1 = 100;
const int a2 = 100;
//const | cnstexpr
//const --- 只保证运行时不被修改 可以在运行后再初始化
//constexpr --- 编译期即可算出来 必须编译时就初始化
const int i = 10;
int j = 20;
const int j1 = j + 10;
// constexpr int j2 = i+10; // 正确
// constexpr int j2 = j+10; //错误 j是变量
常量指针
int *const p1 = &x; //指针本身是常量,为顶层const
const int *p2; //指针指向的内容是常量,为底层const
const int *const p3 = &xc; //两者都是常量
*p1 = 5; //顶层const,指针地址不能改,但是值可以改
cout << *p1 << endl;
// *p2=6; //错误,底层const 指针指向的内容不可改
p2=p3; //正确
常量引用
int y =9;
const int &yr = y;
y = 10;
// yr = 10; //错误,yr为const引用,不可以通过它修改对应的变量y
C++的常量引用有啥用
//const引用可以用常量初始化,普通引用不能
const int &f = 10;
// int &ff = 10; error
//有啥卵用?---- 函数有时需要临时对象
//如:fun(int &a) fun(1)× -----> fun(const int &a) fun(1)√
类与对象
【C++】类与对象 | 常对象与常对象成员



