sizeof 不应作用于数组参数
10.7.1 ID_sizeof_arrayParameter
被声明为数组的形式参数等同于指针,对其使用 sizeof 无法获取到数组大小,往往意味着错误。
示例:
void fun(char a[10]) {
memset(a, 0, sizeof(a)); // Non-compliant
}
例中参数 a 是一个指针,sizeof(a) 等同于 sizeof(char*)。
在 C++ 代码中,如果有必要将参数设为数组,建议使用引用的方式,如:
void fun(char (&a)[10]) {
memset(a, 0, sizeof(a)); // Compliant
}
这样 sizeof(a) 便等同于 sizeof(char[10])。
相关
依据
ISO/IEC 9899:1999 6.7.5.3(7)
ISO/IEC 9899:2011 6.7.6.3(7)
ISO/IEC 14882:2003 13.1(3)
ISO/IEC 14882:2011 13.1(3)