const auto min = -std::numeric_limits<T>::max();
T x = min; // conversion from 'const int' to 'short', possible loss of data
T 是模板参数,ashort
在这种情况下。一元减法显然执行积分提升。
- 为什么一元减法会进行积分提升?
- If
auto
更改为T
不会生成警告,但它应该将 int 分配给short。为什么没有警告(可能是 VS 很花哨)?
简短的回答:(现在很长,因为人们想要对英语过于迂腐,这本质上是不准确的)。
它不是明确的(如一元减号mathematical
)。
但作为任何操作的一部分(这包括一元减operation
)在 POD 数据上,对输入参数进行隐式检查(可以在 and 操作中使用的最小整数类型是int
)因此在一元减法之前的输入上存在积分提升(mathematical
部分不是操作部分)。 POD 上所有操作的输出与输入参数相同(应用积分提升后)。因此这里的输出也是int
.
长答案:
在 C(以及 C++)中,POD 操作发生的最小类型是int
。因此,在应用一元减号之前,该值将转换为 int。然后应用一元减号。表达式的结果是int
.
看这里:C++ 运算符中的隐式类型转换规则
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)