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

时间:2014-03-17 23:27:12

标签: 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;
}
  

输出结果为:
  98个
  b
  98

我假设,'a' + 1按照以下顺序使用函数int operator+(int, int)进行计算:

  1. 'a'被转换为int
  2. operator+返回整数结果(98)
  3. 这一切都是我的预测。如何检查调用哪个函数是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

1 个答案:

答案 0 :(得分:6)

内置运算符构成 not 函数调用的基本表达式。它们是核心语言的一部分。对于算术类型,应用了一组转换(&#34;通常的算术转换&#34;,5/9),以便两个操作数都是相同类型的值。在您的示例中,一个操作数为char,另一个操作数为int,因此char将通过整数提升规则提升为intunsigned int,并且然后将适当的转换应用于另一个操作数。 (通常情况下,双方最终都会成为int,但您可以设置平台unsigned int。)