const、volatile 限定类型时的位置应统一
6.2.4 ID_badQualifierPosition
语言允许 const、volatile 等关键字出现在类型名称的左侧,也可以出现在其右侧,甚至可以出现在基本类型名称的中间,应对其位置进行统一规范以提高可读性。
可从下列方案中选择一种作为规范,即统一要求 const、volatile:
- 出现在类型名称的左侧
- 出现在类型名称的右侧
- 出现在指针类型名称的右侧,非指针类型名称的左侧
示例:
// 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 则应写在后面,不设此项则不考虑相关顺序
相关
依据
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