【问题标题】:are static_cast<double> and double the same?static_cast<double> 和 double 一样吗?
【发布时间】:2015-03-26 00:26:53
【问题描述】:

我是 C++ 铸造的初学者。 我需要知道 static_cast&lt;double&gt;double 在任何代码中都可以更改吗?

在下面的代码中,我可以用double 替换static_cast&lt;double&gt; 吗?这要短得多。我会失去任何可读性吗?

a= static_cast<double> ( 3 ) / static_cast<double>( 7 );

static_cast 的其他基本类型如intcharsize_t 怎么样?

根据解释,它们必须相同。但是有什么例外吗?

【问题讨论】:

  • 如果你真的想的话,你可以用(double)替换它们。
  • 如果你不使用static_cast,你可以并且应该使用double(...)而不是(double)...,例如:double(3)double(somevar)
  • 你也可以使用文字:a = 3.0 / 7.0.
  • @RemyLebeau double(...)(double)... 有什么区别?
  • 一个问题与专家建议的解决方案不兼容,有人如何将这个问题与其他地方联系起来并感觉答案很明确??

标签: c++ c++11 casting type-conversion static-cast


【解决方案1】:

阅读When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?


C++11 草案标准调用 T(number) 功能表示法和 (T) number 转换表示法。鉴于表达式列表是单个表达式,它们是等价的:

§5.2.3/1 一个 simple-type-specifier (7.1.6.2) 或 typename-specifier (14.6) 后跟一个带括号的表达式列表构造一个值 给定表达式列表的指定类型。如果表达式 list 是单个表达式,类型转换表达式是 等同于(在定义上,如果在含义上定义) 相应的强制转换表达式(5.4)。 [...]

(T) number可以调用static_cast,在这种情况下有如下行为:

§5.2.9/4 否则,表达式 e 可以显式转换为 输入T 使用static_cast 形式static_cast&lt;T&gt;(e) 如果 声明T t(e); 格式正确,对于一些临时发明的 变量t (8.5)。这种显式转换的效果是 与执行声明和初始化然后使用相同 作为转换结果的临时变量。表达方式 e 当且仅当初始化将它用作 一个左值。

您可以节省大量的输入,而只需使用浮动文字(其类型为 double)。

a = 3.0 / 7.0;

【讨论】:

  • Given that the operand is a single expression 是什么意思?
  • @ziftron T(x1) 而不是 T(x1, x2, ...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多