c++ - 静态转换以避免 IDE 警告?

标签 c++

<分区>

我正在使用 Clion,并且经常收到 Parameter type mismatch 警告。例如在下面:

std::default_random_engine random_engine(time(0));

我得到 Parameter type mismatch: Using 'unsigned long' for signed values of type 'time_t'

我知道避免此警告的唯一方法是使用静态转换,例如:

std::default_random_engine random_engine(static_cast<unsigned long>(time(0)))

这个转换可以自动完成。我的程序不需要编译。

但是,当参数可以自动转换时,是否有任何性能成本(或其他原因)我应该避免使用静态转换?

最佳答案

这是一个一般的原则链,应该包含一个答案:-)

  1. 任何构建都必须完全没有警告。 (/WX 或任何你拥有的)
  2. 您应该启用尽可能多的警告。
  3. 你应该避免 C 风格的转换,因为它们回来咬你。
  4. static_cast 绝不会比隐式转换产生更多的性能成本。 (通常为 0。)
  5. 尽可能使用准确的类型。 (例如使用整数或浮点字面量类型后缀)
  6. 当您无法匹配确切的类型时,因为两个函数(或...)需要不同但兼容的类型,并且如果隐式转换触发警告,请使用 static_cast
  7. (!) 如果隐式转换触发警告,这很可能是因为转换有损或在某些边缘情况下存在其他问题。
  8. 考虑为这些有损转换编写 shim 函数(可能需要额外的运行时检查)。

关于c++ - 静态转换以避免 IDE 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50166691/

相关文章:

c++ - 如何左移一个特定位?

c++ - 在 std::unordered_map 中 move 插入/放置失败后恢复 move 的元素

c++ - 调试 gcc 插件

c++ - 如何dlopen jemalloc动态库

c++ - 如何在 C++ 中组合两个或多个任意类型的 vector

c# - C++ 比 C# 快多少?

c++ - QT ofstream 使用变量作为路径名

C++使用atof将字符串转换为double

c++ - QLineEdit 圆角?

c++ - OpenGL VBO 法线/光照问题