cv-qualifier 有三种:const and volatile, mutable。
const/volatile 称为 type qualifiers。
它们能与任何 T 组合成三种不同的类型:
const 修饰的 T, 一般形如 const T 或者 T constvolatile 修饰的 Tconst-volatile 修饰的 T注意 const/volatile 是直接修饰 type 的。
也就是说:int volatile a, b; 表示 a,b 的类型都是 volatile int。而且 int a, volatile b; 是非法的。即 const 和 volatile 一定是直接修饰 type 的,不能修饰变量。这和指针申明 *,引用申明 &,数组申明 [] 等是完全不同的。
例如 int a, *b, c[10], &d = a; 是合法的。const 和 volatile 可以同时修饰一个 type,表示一个"每当要读此变量时,都从原始内存地址读取",防止被编译器优化掉。
mutable 用于修饰 (1)non-static (2)class members of (3)non-reference (4)non-const (5)type。注意这一句话里有 5 个条件。
class X { mutable const int* p; OK. 看作 (mutable int) (const*) p; 即 p 并不是一个 const member mutable int* const q; ill-formed. 看作 (int*) (mutable const) q; 即 q 是一个 const member };C++ 中 mutable 是一种 storage-class-specifier, 而不是 type qualifier, 这可能也是为什么它不能和 static 共存.Referencehttps://en.cppreference.com/w/cpp/language/cv ---来自腾讯云社区的---JIFF
微信扫一扫打赏
支付宝扫一扫打赏