我正在寻找确切的原因,为什么这种转换会在c ++上发出警告但不会在c上发出警告。是否与c ++强类型和c弱类型有关? 是因为c中的类型可以在运行时确定,所以编译没有指出警告? 谢谢。
答案 0 :(得分:10)
从double
到int
的转换是否存在警告与C和C ++之间的任何差异无关。
警告(并且您没有告诉我们警告的内容;请使用该信息更新问题)可能有效。如果截断的double
值超出int
的可表示范围,则行为未定义。如果它在范围内,但在数学上不等于整数,则转换将丢失信息。
有些编译器会警告类似这样的事情,其他编译器不会 - 并且某个编译器可能会也可能不会发出警告,具体取决于您指定的选项。