gpt4 book ai didi

c++ - C++ 隐式转换原语的警告或错误

转载 作者:IT老高 更新时间:2023-10-28 22:05:09 30 4
gpt4 key购买 nike

我对一些 C++ 代码进行了一些重度重构,并发现了许多由我不知道的隐式转换引起的错误。

示例

struct A *a();

bool b() {
return a();
}

void c() {
int64_t const d(b());
}

问题

  1. b 中,a 的返回类型被默默地转换为 bool
  2. c 中,从 b 返回的值被静默提升为 int64_t

问题

我如何才能收到原始类型之间隐式转换的警告或错误

注意

  1. -Wconversion 的使用似乎只选择了几个与上述示例无关的任意转换。
  2. BOOST_STRONG_TYPEDEF不是一个选项(我的类型需要是 POD,因为它们用于磁盘结构中)。
  3. C 也很有趣,但是这个问题与 C++ 代码库有关。

最佳答案

C++ programming language, 3rd edition ,附录 C.6,即“隐式类型转换”,Bjarne Stroustrup 将转换分类为 promotionsconversions:第一个“保留值”(即您的情况 2),第二个没有(案例1)。

关于转换,他说“基本类型可以通过多种方式相互转换。在我看来,允许进行太多转换。”和“编译器可以警告许多有问题的转换。幸运的是,许多编译器实际上会这样做。”

另一边的

促销是安全的,似乎编译器不应该对他们发出警告。

编译器警告通常不是强制性的。通常在 C++ drafts and final ANSI documents据报道,建议的“实现者应发出警告”:如果需要,您可以自己检查以获取更多信息。

已编辑:添加了 C++11 注释:

The C++ programming language, 4th edition ,第 3 版的附录已被报告并再次扩展为第 10.5 节“隐式类型转换”。

与之前的考虑相同,C++11 更精确地定义了“缩小转换”并添加了 {}-initializer notation (6.3.5),截断会导致编译错误。

关于c++ - C++ 隐式转换原语的警告或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477139/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com