【发布时间】:2011-05-27 12:03:37
【问题描述】:
我对一些 C++ 代码进行了一些重度重构,并发现了许多由我不知道的隐式转换引起的错误。
示例
struct A *a();
bool b() {
return a();
}
void c() {
int64_t const d(b());
}
问题
- 在
b中,a的返回类型被默默地转换为bool。 - 在
c中,从b返回的值被静默提升为int64_t。
问题
我如何才能收到原始类型之间隐式转换的警告或错误?
注意
-
-Wconversion的使用似乎只选择了几个与上述示例无关的任意转换。 -
BOOST_STRONG_TYPEDEF不是一个选项(我的类型需要是 POD,因为它们用于磁盘结构)。 - C 也很有趣,但是这个问题与 C++ 代码库有关。
【问题讨论】:
-
我不知道 -Wextra 是否会警告这些,但通常如果您想获得更多诊断信息并在代码中找到更多有问题的地方,然后尝试在几个关闭扩展的编译器上构建它,所有警告都打开了。例如 gcc、icc 和 clang。你肯定会发现更多问题。
-
你用的是什么版本的gcc?
-
两种转换都符合标准,因此编译器不应警告它们。尝试使用静态代码分析器。另请参阅此(不幸关闭)问题的 cmets stackoverflow.com/questions/19306020/…
-
@Raxvan:任何版本。
标签: c++ gcc type-conversion implicit-conversion