gpt4 book ai didi

c++ - C++11 何时进行算术类型转换(相对于运算符优先级)?

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:47 25 4
gpt4 key购买 nike

如果我有以下代码:

double compute(double val1,
int32_t val2,
int32_t val3,
int32_t val4) {
return val1 + val2 * val3 * val4;
}

C++11语言是如何指定进行乘法运算的?例如,val1, val2, val3 被乘以32位整数,根据运算符优先级,可能溢出,然后转换为double , 还是它们乘以 double ?

一般来说,标准在这个问题上到底是怎么说的?它在 C++ 的后续版本(例如 C++17)中是否发生了变化?

最佳答案

表达式

val1 + val2 * val3 * val4

的类型为double,但乘法部分的类型为int32_t。如果我们应用关于如何评估的规则,我们有

val1 + (val2 * val3 * val4)

因为乘法具有更高的优先级,所以将在不考虑 val1 类型的情况下对其进行评估,并且由于所有操作数都具有相同的类型,因此结果类型将与操作数相同。然后将该结果转换为 double 并添加到 val1。此行为在任何 C++ 版本中都没有改变。

要使乘法以 double 的形式发生,您需要将 val2val3 转换为 double,这将使整个乘法部分评估为 double。看起来像

val1 + (static_cast<double>(val2) * val3 * val4)

不需要括号,但我喜欢用它们来显示分组

关于c++ - C++11 何时进行算术类型转换(相对于运算符优先级)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com