☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

const、volatile 不可限定引用

6.2.3 ID_qualifierInvalid
目录 › next › previous

在 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)

参考

SEI CERT DCL52-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.