【问题标题】:old-style simple cast precedence in c++C ++中的旧式简单转换优先级
【发布时间】:2018-09-19 16:45:14
【问题描述】:

我在一些 c++ 代码中有一些旧式转换,我想将其转换为新式。我看了一下优先级和关联性运算符documentation,但没看懂。

( double ) myValueA() / myValueB()

等价于

static_cast<double>( myValueA() ) / myValueB()

或到

static_cast<double>( myValueA() / myValueB() )

我想其他数字运算符的答案是一样的 (*/+-)

【问题讨论】:

  • operator precendence。强制转换是最高的先例之一,高于除法和其他算术运算。
  • 抱歉,将重新制定
  • @FrançoisAndrieux 你能详细说明一下吗?
  • explicit type conversion 解析为一系列演员根据需要。如果myValueA() 返回的值足以满足static_cast&lt;double&gt; 的要求,则将(double) 视为1 是正确的。如果无法使用static_cast 进行演员表,那只会是reinterpret_cast。另请注意,显式类型转换可以删除constreinterpret_caststatic_cast 都无法做到。因此,某些显式类型转换可能还需要 const_cast 作为系列的一部分。
  • 另请注意,函数调用运算符的优先级高于C-style cast运算符。 (顺便说一句,我们说“更高的优先级”有点误导,但在@FrançoisAndrieux 引用的表中,优先级实际上具有更低的数字)。

标签: c++ casting operator-precedence static-cast


【解决方案1】:

( double ) myValueA() / myValueB()

( double ) 是 c 风格的演员表。如果我们查看operator precedence table,我们会发现它的优先级高于算术运算符,所以

( double ) myValueA() / myValueB()

相同
static_cast<double>(myValueA()) / myValueB()

【讨论】:

    【解决方案2】:

    演员的优先级较高,所以相当于

    static_cast<double>(myValueA()) / myValueB()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2012-04-13
      • 2014-07-05
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多