C风格的C语言转换和可读性

时间:2010-12-09 15:10:34

标签: c++ c casting readability

是的我知道你不应该在C ++中使用C风格的演员表,但在某些情况下我真的觉得它更具可读性,例如比较这两个:

d = ((double)i * 23.54) / (d + (double)j);

d = (static_cast<double>(i) * 23.54) / (d + static_cast<double>(j));

哪一个更具可读性?

现在谈谈我的主要问题。显然我更喜欢上面的那个,但是在我看来有一种方法可以让它更具可读性:

d = (double(i) * 23.54) / (d + double(j));

我的问题是,效率会降低吗?在这种情况下,编译器是否会创建比使用其他方法更多的双打,或者它是否足够聪明?这或多或少比典型的C风格演员阵容差吗?

6 个答案:

答案 0 :(得分:15)

他们都不可读。你应该写:

d = (i * 23.54) / (d + j);

答案 1 :(得分:4)

编译器将“创建”完全相同数量的双精度数。在转换和构造原始数字类型之间没有实际区别。

答案 2 :(得分:2)

在这个特殊情况下,我已经评论了R关于让编译器选出演员阵容的答案。

但是,有些情况下您需要进行显式转换:

  • 您希望防止溢出或提高精度
  • 您想检查转换的有效性

Boost Numeric Conversion提供了一个非常合适的演员阵容,比static_cast好得多: boost::numeric_cast

  • 当不需要检查时(即从小整数转换为大整数)没有开销
  • 在需要时运行时检查值(即从大型转换为小型或从有符号转换为无符号)

它比static_cast更具可读性,因为数字的本质是突出显示的,并且更加安全,因为它可以防止未定义的行为(和可移植性问题)启动。

答案 3 :(得分:2)

C ++中的强制转换函数长期难以设计的原因在于设计 1)为了向用户表明他可能做错了什么 2)在必要的情况下,引起对该段代码的注意,它可能正在做一些危险或非常规的事情。

答案 4 :(得分:1)

恕我直言,static_cast更具可读性,因为它向读者提供有关演员表演性质的信息。

答案 5 :(得分:0)

我建议你编译成程序集(如果你的编译器支持这样的选项)。例如,Gnu C ++选项-S将输出程序集,以便您自己查看。