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

Dae*_*pha 10 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));
Run Code Online (Sandbox Code Playgroud)

哪一个更具可读性?

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

d = (double(i) * 23.54) / (d + double(j));
Run Code Online (Sandbox Code Playgroud)

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

R..*_*R.. 15

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

d = (i * 23.54) / (d + j);
Run Code Online (Sandbox Code Playgroud)

  • @DaedalusAlpha:并且它正在使用演员"只是为了安全",这往往会让人们陷入C-casts的麻烦:因为他们足够强大来执行*不安全的转换,你可能会无意中创建一个表达式当一种类型在其他地方被改变时,默默地从"过于冗长而正确"变为"非常悲惨的错误"...... (3认同)
  • @j_random_hacker:你的例子很糟糕而且完全是错误的.如果`RAND_MAX`是`INT_MAX`,则在转换为double之前,`RAND_MAX + 1'已经溢出.用`1.0`替换`1`将修复bug并删除无用的强制转换. (3认同)

Mar*_*tos 4

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