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(不是short)char;和促销(例如char- > int)具有较高的排名比其他转换(例如char- > short)在过载的分辨率。
较小整数类型(例如
char)的prvalue可以转换为较大整数类型(例如int)的prvalue 。
signed char或signed short可以转换为int;unsigned char,char8_t(从C ++ 20开始)unsigned short,int如果可以保留整个值范围,则可以转换为;否则,可以转换为unsigned int;char可以转换为int或unsigned int取决于基础类型:signed char或unsigned char(请参见上文);
和(强调我的)
请注意,所有其他转化都不是促销活动;例如,重载分辨率选择
char->int(升级)而不是char->short(转换)。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |