是的我知道你不应该在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风格演员阵容差吗?
答案 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将输出程序集,以便您自己查看。