为什么加short的时候会有int到short的narrowing conversion warning? (C++)

Why is there a narrowing conversion warning from int to short when adding shorts? (C++)

对于以下数组,我有一个与此类似的代码:

long int N = 424242424242; //random number
short int* spins = new short int spins[N];
std::fill(spins, spins+N, 1);

现在假设出于某种原因我想将该数组的几个元素添加到一个名为 nn_sum 的短整数中:

short int nn_sum = spins[0] + spins[1];

然而,当我在 CLion IDE 上执行此操作时,Clang-Tidy 将其标记为黄色并告诉我:

Clang-Tidy: Narrowing conversion from 'int' to signed type 'short' is implementation-defined

为什么会这样?为什么会缩小?添加时,C++ 是否将短裤转换为整数?如果是这样,为什么,我可以做些什么来让它更好地工作?甚至可能完全抛弃短裤?

请记住,我在应用程序的非常 计算密集型部分中有这样的代码,因此我想让它尽可能高效。任何其他建议也将不胜感激。

发生这种情况是因为整数提升。将两个 short 值相加的结果不是 short,而是 int.

您可以使用 cppinsights.io 进行检查:

short a = 1;
short b = 2;
auto c = a + b;  // c is int

演示:https://cppinsights.io/s/68e27bd7