为什么在进行"character + 1"时我没有告诉它进行类型转换?

Gen*_*son 7 c++ ascii

当增加字符时,例如:char character{'a'};is 'a'和INT是97.当我说"人物+ 1"或"+ 1"我将获得整数值98没有'b'.现在,如果我做"++ character",我将获得char'b'.

char character{'a'};
cout << character + 1 << '\n';
cout << ++character << '\n';
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 7

在所涉及的类型方面,添加和增量运算符的指定方式不同.

[expr.add]

1加法运算符+和 - 从左到右分组.对算术或枚举类型的操作数执行通常的算术转换.

通常的算术转换将每个整数类型转换为小于inta int.它没有停止它,它已经融入了语言.并且因为这些转换发生在添加本身之前,结果类型不能小于int.等character + 1int其获取由印刷operator<<(int)的标准流类的过载.

但是,对于增量:

[expr.pre.incr]

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

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