当我将int添加到char('a'+ 1)时调用哪个operator +函数

Jak*_*ruk 2 c++ casting operators

我有以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出为:
98
b
98

我假设,这'a' + 1int operator+(int, int)按以下顺序计算功能:

  1. 'a'被转换为int
  2. 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;
Run Code Online (Sandbox Code Playgroud)

输出为:
char
int
int

Ker*_* SB 6

内置运算符构成函数调用的基本表达式.它们是核心语言的一部分.对于算术类型,应用了一组转换("通常的算术转换",5/9),以便两个操作数都是相同类型的值.在你的榜样,一个操作数char,而另一个int,所以char被提升到一个intunsigned int通过积分促销规则,然后适当的转换应用到另一个操作数.(通常情况下,双方最终会成为一个int,尽管你可以设想平台unsigned int.)

  • 它们不是函数调用,但它们根据函数调用的规则参与重载选择. (6认同)