const关键字

const关键字

修饰对象

const T x:对象只读,初始化后不能改。

const T obj:智能调用const成员函数

T* p:指向 T 的指针。

const T* p / T const* p指向 const T 的指针(不能改 指向对象;可改指针指向)。

T* const pconst 指针(指针自身不可改;能改 指向对象)。

const T* const p:指针自身不可改,且指向 const 对象。

引用本身不可改;const T& r = 指向 只读别名

成员函数后的const

T::f()const把隐藏的 this 变为 T const*不能改非 mutable 成员;只能调 const 成员函数

static 成员函数不能...() const(没有 this

mutable 修饰非静态成员变量,允许在 const 成员函数里修改(缓存、计数、互斥锁等“逻辑只读”数据)。

auto 会去掉顶层 const/引用

1
const int& r = n; auto x = r; // x 是 int

需要保留引用/const 属性时用 decltype(auto)

1
2
int& f();  auto a = f();          // a 是 int(拷贝)
decltype(auto) b = f(); // b 是 int&(保留引用)