不应存在多余的类型转换
12.19 ID_redundantCast
多余的类型转换是没有意义的,往往意味着某种错误。
不应出现下列情况:
- 原类型与转换后的类型完全相同
- 非 void 转换的结果没有被使用
示例:
float foo(int x) {
return (int)x; // Non-compliant
}
float bar(int y) {
(float)y; // Non-compliant
}
例中参数 x 转换后的类型与转换前完全相同,参数 y 转换后没有被读取,均不符合要求。
应改为:
float foo(int x) {
return (float)x; // Compliant
}
float bar(int y) {
return (float)y; // Compliant
}
可用显式 void 转换表示有意放弃表达式的值,但对无返回值的函数调用不应再使用 void 转换,如:
char foo();
void bar();
void baz(int x) {
(void)x; // Compliant
(void)foo(); // Compliant
(void)bar(); // Non-compliant, ‘(void)’ is redundant
}