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

C++ C/C++;消除Wconversion警告的最佳实践,c++,c,type-conversion,C++,C,Type Conversion,我发现-Wconversiongcc/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*size

我发现
-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));

我应该每次添加显式类型转换(这一点都不简洁),还是忽略它们

每次都应该手动施放

此外,例如,每次将和int转换为size\u t时,应确保int为正

assert( len >= 0 ) ;

<>是的,消除警告是一个好的实践,这也是萨特和Andrei Alexandrescu书C++编码标准的建议:101条规则、指南和最佳实践():< /P> 你的编译器是你的朋友。如果它对某个特定的事件发出警告 构造时,代码中通常存在潜在问题

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

摆脱警告:a)理解它;然后b)重新表达你的观点 消除警告并使其对人和人都更清楚的代码 编译器,确保代码符合您的预期

即使程序在第一个阶段似乎运行正常,也要这样做 地点。即使你确信警告是良性的,也要这样做。 即使是善意的警告也会掩盖后来指向真实情况的警告 危险

当然,在某些情况下,这可能很难实现,例如大型遗留代码库,但对于新项目,这应该是您的目标。

BTW:Suggest
inti=(int)round(a_small\u double) C和C++是不同的(这里)。请选择其中一个。