为什么我在减去两条未签名的短裤时收到"conversion to ‘short unsigned int’ from ‘int’ may alter its value"警告



我收到此警告

warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value [-Wconversion]
unsigned short spaceEmpty = 10 - spaceFilled; 

从这些代码行

unsigned short spaceFilled = num_items(aisle, j);
unsigned short spaceEmpty = 10 - spaceFilled; 

有谁知道为什么会这样? num_items返回一个无符号的短整型,并且空格填充已正确初始化。

那么,为什么在spaceEmpty中执行算术运算会给我一个警告呢?

表达式10 - spaceFilled的类型为int,因为在进行算术之前发生了操作数的算术转换。

然后,将此int分配给unsigned short,这将导致警告。

有两个部分会影响最终类型:

  • 10文字的类型为int.因此,该操作将采用至少该大小的类型
  • spaceFilled,小于int,至少被提升到int

因此,即使您将10替换为(unsigned short)10,您仍然可以将操作数提升为int

10int类型的整数常量。如果使用不同类型的值执行算术运算,则表示形式类型较小的值将提升为表示形式较大的值的类型。

注意:强制转换也意味着转换,因此如果您显式转换其中一个操作数值,则升级规则仍然适用。

例如,(unsigned short) 10 + (unsigned short) 10仍然获得类型int的值。

所以在:

10 - spaceFilled;

spaceFilled在减法之前被提升为int

结果int值将分配给类型为unsigned shortspaceEmpty。这里发生了从intunsigned short的转换。

这就是警告警告您的内容,因为spaceEmpty中的结果值可能由于转换而与预期不同。

相关内容

最新更新