#include <iostream>
#include <climits>
#include <cinttypes>
using namespace std;
int main()
{
uint16_t i = 0;
cout << USHRT_MAX << '\n' << i - 1 << '\n';
return 0;
}
输出
65535
-1
我期待两个相同的输出,但它不是。这不是一种不符合标准的行为吗?
*系统:Windows7
*编译选项:g ++ -o $(FileNameNoExt)$(FileName)-std = c ++ 11 -Wall -Wextra
答案 0 :(得分:2)
当C ++看到表达式
时i - 1
它会自动提升i
和1到int
类型,因此表达式的结果为int
,因此输出为-1。
要解决此问题,请将表达式的整体结果强制转换为uint16_t
,或执行类似
i--;
就地修改i
,然后打印i
。
希望这有帮助!
答案 1 :(得分:2)