让我们说,我们有:
char x = 'a';
int y = 1;
所以,如果你跑:
std::cout << x + y;
它打印98而不是&#39; b&#39;。正如我从here看到的那样
<<operator
只有 int 参数实现。
从现在开始,我有两个问题:
std::cout << x
仍然按预期工作并打印 char 值?答案 0 :(得分:4)
感谢Fefux,Bo Persson和Matti Virkkunen答案为:
来自CPP Reference: Implicit conversions:
算术运算符不接受小于
int
的类型 参数和积分促销会在之后自动应用 左值转换(如果适用)。
因此x + y
的返回类型为 int
。
std::cout
operator<<(char)
为non-member。
答案 1 :(得分:-3)
您可能知道,C ++向后兼容C。
C&amp; C ++将char
视为int
。
您可能认为这是该语言的缺陷,但恰恰相反,这非常方便。
假设您要将大写字母转换为相应的小写字母。由于任何大写字母的ASCII码都低于相应的小写字母,因此这很简单:
char c = 'A';
std::cout << (char) (c + 32); // output: 'a'
反过来你可以从小写字母转换为大写字母:
char c = 'a';
std::cout << (char) (c - 32); // output: 'A'