【发布时间】:2012-08-02 20:09:46
【问题描述】:
const auto min = -std::numeric_limits<T>::max();
T x = min; // conversion from 'const int' to 'short', possible loss of data
T 是一个模板参数,在这种情况下是 short。一元减号显然执行积分提升。
- 为什么一元减号会执行积分提升?
- 如果将
auto更改为T,则不会生成警告,但应该将int 分配给short。为什么没有警告(可能是 VS 很花哨)?
【问题讨论】:
-
"为什么一元减号执行积分提升?"因为标准是这么说的(在 5.3.1. (7) 中)。
-
@DanielFischer:但在制定标准的过程中做出的每个决定肯定都有其背后的原因,不是吗?如果可能的话,帮助人们理解这个推理并不是一件坏事。
-
@EdS。是的,希望这些决定背后是有原因的。我不知道它们的原因,但我怀疑这至少部分是“因为它在 C 中就是这样”。为什么在 C 语言中会这样?我怀疑这是因为让 CPU 处理其本机类型而不将结果转换回原始类型更简单。但这只是猜测。
-
@DanielFischer(第 1 条评论):这个答案让我非常恼火(我敢肯定还有很多其他人)它甚至都不好笑......
-
如果一些算术运算遵循整数提升规则而一些被豁免,那会不会更奇怪?然后你会问“为什么在应用整数提升时有两组不同的规则?为什么它们不能保持一致?”
标签: c++ auto integer-promotion