为什么在添加空头时会出现从int到short的缩小转换警告?(C++)



我有一个类似于以下数组的代码:

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

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

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时是否将其转换为int?如果是,为什么?我能做些什么让它更好地工作吗?甚至可能完全抛弃短裤?

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

这是因为整数提升。将两个short值相加的结果不是short,而是int

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

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

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

最新更新