我正在使用德语丛书“ C ++-DasÜbungsbuch”的副本来提高我的C ++技能; 5. mitp 中的Auflage 。
练习8.1提出了以下问题(翻译并简化为相关内容):
8.1 给出以下定义:
char c = 'q';
确定在评估以下语句期间将操作数转换为的类型:
a)
c == 'Q'
我的答案应该是char
,因为c
被声明为char
,据我所知,'Q'
是一个字符文字。但是,该解决方案指出:
a)这两个操作数的类型都将转换为
int
这使我感到困惑。确实是这样的情况:将char == char
比较隐式转换为int == int
,为什么要这样做?如果问题是
a)
c == 82
我本可以理解,82
将被解释为整数常量,因此c
也将被转换为int
,但是答案明确提到了两者 要转换的操作数。
有人可以向我解释一下吗?
答案 0 :(得分:5)
这本书谈论的是usual arithmetic conversion中的happens if both operands have arithmetic types(对于所有整数类型,包括char
都是正确的)。这导致了integral promotion。
答案 1 :(得分:-5)
我认为,它用于比较与您的角色相对应的ASCII码。 例如,它将q转换为113,将Q转换为81。 所以应该比较:
'Q'=='q' //81==113
由于C将字符解释为ascii表的编号,因此将它们强制转换为整数。 参见https://www.rapidtables.com/code/text/ascii-table.html