const、volatile 不可限定引用
6.2.3 ID_qualifierInvalid
在 C++ 语言中,const 或 volatile 可以限定指针,但不可限定引用,否则起不到任何作用。
示例:
int a = 0;
int &const i = a; // Non-compliant
int &volatile j = a; // Non-compliant
限定 & 号的 const 和 volatile 是无效的,i 可被随意修改,j 也可能被优化。
应去掉限定符,或使限定符作用于类型名称:
const int& i = a; // Compliant
volatile int& j = a; // Compliant
注意,如果限定符作用于引用类型的别名,会引起很大误解,如:
typedef int& int_r; // Reference type alias, bad
const int_r r0 = a; // Non-compliant, r0 is not a const-reference at all
const int_r& r1 = a; // Non-compliant, r1 is not a const-reference at all
例中 r0 像是一个常量对象,而 r1 像是常量对象的引用,但 const int_r 展开后相当于 int & const,r0 不是常量,r1 也不是常量的引用。
依据
ISO/IEC 14882:2003 8.3.2(1)
ISO/IEC 14882:2011 8.3.2(1)
ISO/IEC 14882:2017 11.3.2(1)