|
|
1
1
您可能需要-wconversion标志来打开这些警告。但是,它不会警告 长的 -gt; int ,因为它们的大小与gcc相同(该值不会因为转换而更改)。但是如果你把它转换成 长的 -gt; 短的 我想简单地做一个演员不会被推荐,因为那只会掩盖错误的可能性。检查这样的强制转换不会修改值以安抚编译器之后就可以了。 |
|
|
2
3
最好的方法是:
你需要
|
|
|
3
2
如果你没有权限
实际上这有点作弊,因为它不适用于浮点目的地类型。
是否使用assert或其他错误处理取决于您实际要对无效输入执行的操作。
还有
|
|
|
4
1
这里没有任何警告,因为平台上的“int”和“long int”数据类型具有相同的大小和范围。根据架构的不同,它们可能会变得不同。 为了避免出现奇怪的错误,请使用范围检查。我建议您使用STD::MultICIX限制::MI/MAX(见)。 范围检查后,您可以安全地使用static_cast或c-style cast。 另一方面,您也可以依赖于STD(:)类中实现的相同功能。STD::StrugSuffic将默认为平台安全和类型安全。 |
|
5
0
大多数现代编译器都会根据您配置的警告级别对转换和可能的截断发出警告。在警告级别为4的MSVC上。 最佳实践是从函数中返回long,并让调用代码决定如何处理转换。除此之外,至少要确保从strtol获得的值在返回之前符合int,正如let_me_be所建议的那样。 |