为什么在使用字符参数调用时构造函数选择INT而不是SHORT?

Abh*_*agi 11 c++ constructor types overload-resolution c++11

可以看到在下面的代码中,带有int参数的构造函数被调用。我知道int这很好。但是为什么不short呢?的ASCII值作为'A'65 short可以容纳一个。

在什么条件下int调用带有数据类型参数的构造函数?


#include<iostream>

class RightData
{
    int x; 
    public:
    RightData(short data)
    {
        cout<< "Short" << endl;
    }
    RightData(int data)
    {
        cout<< "Int" << endl;
    }
    RightData(float data)
    {
        cout<< "Float" << endl;
    }
    ~RightData() 
    {
        cout<< "Final";
    }
};
int main()
{
    RightData *ptr = new RightData('A');
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

son*_*yao 11

整体晋升的结果是int(不是shortchar;和促销(例如char- > int)具有较高的排名比其他转换(例如char- > short)在过载的分辨率

较小整数类型(例如char)的prvalue可以转换为较大整数类型(例如int)的prvalue 。

  • signed charsigned short可以转换为int;
  • unsigned charchar8_t(从C ++ 20开始)unsigned shortint如果可以保留整个值范围,则可以转换为;否则,可以转换为unsigned int
  • char可以转换为intunsigned int取决于基础类型:signed charunsigned char(请参见上文);

和(强调我的)

请注意,所有其他转化都不是促销活动;例如,重载分辨率选择char-> int(升级)而不是char-> short(转换)