我收到此警告
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
。
10
是int
类型的整数常量。如果使用不同类型的值执行算术运算,则表示形式类型较小的值将提升为表示形式较大的值的类型。
注意:强制转换也意味着转换,因此如果您显式转换其中一个操作数值,则升级规则仍然适用。
例如,(unsigned short) 10 + (unsigned short) 10
仍然获得类型int
的值。
所以在:
10 - spaceFilled;
spaceFilled
在减法之前被提升为int
。
结果int
值将分配给类型为unsigned short
的spaceEmpty
。这里发生了从int
到unsigned short
的转换。
这就是警告警告您的内容,因为spaceEmpty
中的结果值可能由于转换而与预期不同。