C ++中旧式简单强制转换的优先级

7

我在一些C++代码中使用了旧式的强制转换,现在希望将其转换为新式的。我查看了运算符优先级和结合性文档,但未能理解其含义。

( double ) myValueA() / myValueB()

等同于

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

或者到
static_cast<double>( myValueA() / myValueB() )

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


5
请参考运算符优先级,强制类型转换的优先级非常高,高于除法和其他算术运算。 - François Andrieux
sorry, will reformulate - Denis Rouzaud
@FrançoisAndrieux,您能详细说明吗? - Denis Rouzaud
1
显式类型转换 解决了一系列需要转换的问题。如果 myValueA() 返回一个值,对于该值,static_cast<double> 就足够了,那么将 (double) 视为正确的转换方式。只有在使用 static_cast 无法进行转换时,才会使用 reinterpret_cast。此外,请注意,显式类型转换可以去除 const,而 reinterpret_caststatic_cast 都不能这样做。因此,某些显式类型转换可能还需要 const_cast 作为转换系列的一部分。 - François Andrieux
另外请注意,函数调用运算符的优先级高于 C 风格的强制类型转换运算符。顺便说一下,“优先级更高”的说法有点误导人,但是在 @FrançoisAndrieux 引用的表格中,优先级的数字实际上更低。 - Daniel Langr
相同的问题(适用于普通C语言):https://dev59.com/V3A75IYBdhLWcg3wVXav - imz -- Ivan Zakharyaschev
2个回答

11

In

( double ) myValueA() / myValueB()

( double )是一种 C 风格的转换方式。如果我们查看运算符优先级表,我们会发现它比算术运算符具有更高的优先级,因此

( double ) myValueA() / myValueB()

是同义词

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

6

这里的“cast”具有更高的优先级,因此它等效于

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接