例如,当增加字符时:char character{'a'};
是'a'
,而INT是97
。当我说“字符+ 1”或“ a + 1”时,我将得到整数值98
而不是'b'
。现在,如果我执行“ ++ character”,我将得到字符“ b”。
char character{'a'};
cout << character + 1 << '\n';
cout << ++character << '\n';
答案 0 :(得分:7)
加法和增量运算符在所涉及的类型方面的指定不同。
[expr.add]
1加法运算符+和-从左到右分组。通常 对算术或 枚举类型。
通常的算术转换将小于int
的每个整数类型转换为int
。没有停止它,它已经融入了语言中。并且由于这些转换发生在加法本身之前,所以结果类型不能小于int
。因此character + 1
是int
,它是通过标准流类的operator<<(int)
重载来打印的。
但是,对于增量:
[expr.pre.incr]
1通过添加1来修改前缀++的操作数。 应该是可修改的左值。操作数的类型应为 除cv bool以外的算术类型,或指向a的指针 完全定义的对象类型。结果是更新的操作数;它 是左值,如果操作数是位字段,则它是位字段。
结果++character
与character
的类型相同,即它仍然是char
。它也是引用character
的可分配表达式(左值)。分配与分配给character
相同。因此,结果是char
由标准流类的operator<<(char)
重载打印。