我已经关注了代码:
#include <iostream>
using namespace std;
int main()
{
cout << ('a' + 1) << endl;
cout << static_cast<char>('a' + 1) << endl;
cout << static_cast<int>('a' + 1) << endl;
}
输出结果为:
98个
b
98
我假设,'a' + 1
按照以下顺序使用函数int operator+(int, int)
进行计算:
operator+
返回整数结果(98)这一切都是我的预测。如何检查调用哪个函数是100%确定的?
更明确的类型修订:
cout << (typeid('a') == typeid(char) ? "char" : "not char") << endl;
cout << (typeid(1) == typeid(int) ? "int" : "not int") << endl;
cout << (typeid('a' + 1) == typeid(int) ? "int" : "not int") << endl;
输出结果为:
焦炭
INT
int
答案 0 :(得分:6)
内置运算符构成 not 函数调用的基本表达式。它们是核心语言的一部分。对于算术类型,应用了一组转换(&#34;通常的算术转换&#34;,5/9),以便两个操作数都是相同类型的值。在您的示例中,一个操作数为char
,另一个操作数为int
,因此char
将通过整数提升规则提升为int
或unsigned int
,并且然后将适当的转换应用于另一个操作数。 (通常情况下,双方最终都会成为int
,但您可以设置平台unsigned int
。)