消除Wconversion警告的C / C ++最佳实践

时间:2014-06-13 02:44:21

标签: c++ c type-conversion

我发现-Wconversion gcc / clang选项对于查找代码错误非常有用。但也有很多情况下隐式类型转换是安全的 例如:

double a_small_double = 3.5;
/*implicitly convert double to int*/
int i = floor(a_small_double);

int len = 3;
/*implicitly convert int to size_t*/
double *p = (double*)malloc(len*sizeof(double));

我应该每次都添加一个显式的类型转换(根本不简洁),或者只是忽略它们?

2 个答案:

答案 0 :(得分:2)

是的,消除警告是一种好习惯,这也是Herb Sutter和Andrei Alexandrescu的建议 C ++编码标准:101规则,指南和最佳实践 {{ 3}} 的):

  

你的编译器是你的朋友。如果它发出某种警告   构建,通常在您的代码中存在潜在问题。

     

成功的构建应该是静默的(无警告)。如果他们不是,   你会很快养成略读输出的习惯,你会的   想念真正的问题。 (见第2项。)

     

要摆脱警告:a)理解它;然后b)改写你的   代码消除警告,使人类和人类更清楚   代码完成你想要的编译器。

     

即使程序似乎在第一个程序中运行正常,也要这样做   地点。即使你肯定警告是良性的,也要这样做。   即使是良性警告也可能掩盖后来指向真实的警告   危险。

当然,可能会出现这种情况,例如大型遗留代码库,但对于新项目而言,这应该是您的目标。

答案 1 :(得分:1)

您应该每次都手动投射。

例如,每次将convert和int转换为size_t时,都应确保int为正。

assert( len >= 0 ) ;