gpt4 book ai didi

c++ - 为什么一元减去进行整数提升?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:33 25 4
gpt4 key购买 nike

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 花哨)?

最佳答案

简短的回答:(现在很长,因为人们想对英语过分迂腐,而英语本质上是不准确的)。

它不是明确的(如一元减去 mathematical)。但是作为对 POD 数据的任何操作(这包括一元负 operation)的一部分,对输入参数有一个隐式检查(可以在和操作中使用的最小整数类型是 int) 所以在一元减号之前的输入上有积分提升(mathematical 部分而不是运算部分)。 POD 上所有操作的输出与输入参数相同(应用积分提升后)。因此这里的输出也是一个int

长答案:

在 C(以及 C++)中,发生 POD 操作的最小类型是 int。因此,在应用一元减号之前,该值将转换为 int。然后应用一元减号。因此表达式的结果是 int

参见此处:Implicit type conversion rules in C++ operators

关于c++ - 为什么一元减去进行整数提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784992/

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