静态强制转换以避免 IDE 警告?

Static cast to avoid IDE warnings?

本文关键字:IDE 警告 转换 静态      更新时间:2023-10-16

我正在使用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. 考虑为这些有损强制转换编写填充程序函数(可能带有额外的运行时检查(。