inline、virtual、static、typedef 等关键字的位置应统一
6.3.11 ID_badSpecifierPosition
语言允许 inline、virtual、static、typedef 等关键字出现在类型名称的左侧,也可以出现在其右侧,甚至可以出现在基本类型名称的中间,应对其位置进行统一规范以提高可读性。
本规则对下列 C 或 C++ 关键字有同样的要求:
inline、virtual、explicit、
register、static、thread_local、extern、mutable、
friend、typedef、constexpr、
_Alignas、_Atomic、_Noreturn、_Thread_local
这些关键字应统一出现在声明的起始,类型名称的左侧。
对于 const 和 volatile 也需面对类似的问题,参见 ID_badQualifierPosition。
示例:
struct A {
long long typedef LL; // Non-compliant
bool static foo(); // Non-compliant
char friend bar(); // Non-compliant
unsigned int virtual baz(); // Non-compliant
};
例中各种声明均有一定的特殊性,如果声明其特殊性的关键字在类型名称之后,不便于阅读甚至会引起误解。
应改为:
struct A {
typedef long long LL; // Compliant
static bool foo(); // Compliant
friend char bar(); // Compliant
virtual unsigned int baz(); // Compliant
};
相关
依据
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