为什么在执行“字符+ 1”时没有我告诉它进行类型转换?

时间:2019-01-13 13:49:39

标签: c++ ascii

例如,当增加字符时:char character{'a'};'a',而INT是97。当我说“字符+ 1”或“ a + 1”时,我将得到整数值98而不是'b'。现在,如果我执行“ ++ character”,我将得到字符“ b”。

char character{'a'};
cout << character + 1 << '\n';
cout << ++character << '\n';

1 个答案:

答案 0 :(得分:7)

加法和增量运算符在所涉及的类型方面的指定不同。

  

[expr.add]

     

1加法运算符+和-从左到右分组。通常   对算术或   枚举类型。

通常的算术转换将小于int的每个整数类型转换为int。没有停止它,它已经融入了语言中。并且由于这些转换发生在加法本身之前,所以结果类型不能小于int。因此character + 1int,它是通过标准流类的operator<<(int)重载来打印的。

但是,对于增量:

  

[expr.pre.incr]

     

1通过添加1来修改前缀++的操作数。   应该是可修改的左值。操作数的类型应为   除cv bool以外的算术类型,或指向a的指针   完全定义的对象类型。结果是更新的操作数;它   是左值,如果操作数是位字段,则它是位字段。

结果++charactercharacter的类型相同,即它仍然是char。它也是引用character的可分配表达式(左值)。分配与分配给character相同。因此,结果是char由标准流类的operator<<(char)重载打印。