前言:
1 const 的用途
2 void t() const {} 修改成员变量 关键是使用 mutable 关键字 (查看 2.2 的示例)
正文:
一、const 的用途
1. 在 C++ 定义固定的变量
在 C 语言中定义一个 PI
#define PI 3.14
在 C++ 推荐使用 const
inline const double PI {3.14};
理由1 #define 无法进行类型检查,可能存在问题 #define PI "3.14" 这样应该在编译时候就发现的问题
理由2 #define 无法明确具体的应用范围,实际上只要包含 #define 所在的文件,就可以毫无限制的使用 PI 这个常量值
理由3 #define 无法在命名空间中使用,C++ 多人配合开发中通过使用命名空间能够有效避免很多重名问题
2. 常量修饰
2.1 普通变量名
const int len {10}; //常量不可修改
const int* a;
const int& a; //这两种都是声明引用或指向的对象值不允许修改
int* const a; //指针存储的变量地址不可修改,但指向对象的值允许修改
示例
int b {10};
int c {10};
int* const a{&b};
*a = 13;//允许
a = &c; //不允许
const int* const a; //存储的变量地址和对应的变量值都不允许修改
2.2 对于函数的修饰
const int t() {} //返回常量元素
void test () const {} //正常情况下只能有调用 const 成员函数,且不能修改变变量
//通过使用关键字 mutable 就可以修改变量
struct T {
private:
int a {10};
mutable b {10};
public:
void t1() {
std::cout << "T1" << std::endl;
}
void t2() const {
std::cout << "T2" << std::endl;
}
void t3() const {
t2(); //是可以的
t1(); //是无法通过编译的
a = 13; //是无法编译通过的
b = 13; //是允许的
}
}