让我们假设int
是16位类型,以防止从short
进行隐式转换。
long test_1(short x, short y)
{
return x + y;
}
答案 0 :(得分:1)
规则相对简单。二进制+将导致“最大”int的数据类型。如果你有两个相同类型的操作数,结果将是相同的类型。
表达式
return x+y
分两步评估。在第一个中,计算x + y的结果。这是一个简短的(如您的第一个声明)。然后它被转换为函数的类型。
如果要避免溢出,则需要将plus的操作数强制转换为所需的类型:
return ((long)x) + y
为了清晰起见,我已经过度表达了。