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

const、volatile 限定类型时的位置应统一

6.2.4 ID_badQualifierPosition
目录 › next › previous

语言允许 const、volatile 等关键字出现在类型名称的左侧,也可以出现在其右侧,甚至可以出现在基本类型名称的中间,应对其位置进行统一规范以提高可读性。

可从下列方案中选择一种作为规范,即统一要求 const、volatile:

  1. 出现在类型名称的左侧
  2. 出现在类型名称的右侧
  3. 出现在指针类型名称的右侧,非指针类型名称的左侧

示例:

// Non-compliant, inconsistent positions of cv-qualifiers
const long long i = 0;
unsigned int const j = 0;
const int volatile k = 0;

例中 const、volatile 的位置不统一是不符合要求的。

const、volatile 出现在类型名称右侧时,和 * 号一起易被误用,如:

char const const * p = "....";   // Wrong, redundant const-qualifiers
char const * const q = "....";   // Right

const、volatile 出现在类型名称左侧时,如果类型为指针类型,则易引起误解,如:

typedef int* ptr;
const ptr cp = &x;
*cp = 1;             // Looks a bit strange

可参见 ID_qualifierForPtrAlias 的进一步讨论。

如果约定 const、volatile 出现左侧表示类型为对象类型,右侧表示类型为指针类型,有助于提高可读性:

typedef int obj;
typedef int* ptr;

const obj i = 0;    // Indicates that ‘obj’ is an object type
ptr const p = &x;   // Indicates that ‘ptr’ is a pointer type

审计工具不妨通过配置决定具体检查方案。

配置

positionScheme: const、volatile 的位置方案,对应说明中的 1、2、3 号方案 volatileInFront: volatile 是否应写在 const 的前面,如果值为 false 则应写在后面,不设此项则不考虑相关顺序

相关

ID_sandwichedModifier ID_badSpecifierPosition

依据

ISO/IEC 9899:1999 6.7(1) ISO/IEC 9899:1999 6.7.2(1) ISO/IEC 9899:2011 6.7(1) ISO/IEC 9899:2011 6.7.2(1) ISO/IEC 14882:2003 A.6 ISO/IEC 14882:2011 A.6

参考

C++ Core Guidelines NL.26
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.