C ++标准(整数促销)的第4.5节讨论了将整体类型转换为等级类型的特定情况。

C ++标准(积分转换)的第4.7节以(子弹4.7.1)开头:

整数类型的rvalue可以转换为另一种整数类型的rvalue。枚举类型的rvalue可以转换为整数类型的rvalue。

据我了解,在4.5中描述的转换(也许是子弹4.5.3(枚举)以外)可以通过单独使用4.7部分中的技术来执行:4.5.1和4.5.2完全覆盖4.7.1; 4.5.4覆盖4.7.4。那么整个4.5部分的目的是什么?启用了哪些其他转换?也许我错过了一些限制?

PS我正在阅读标准的C ++ 03版本。

有帮助吗?

解决方案

思考 区别很重要,因为两者都不属于同一 转换类别 并有不同的 (请参阅13.3.3.1.1,标准转换序列)。在超载分辨率方面,等级有所不同:

标准转换序列按其等级排序:与促销相比,精确的匹配是更好的转换,这比转化率更好。

最后,我认为正是4.5和4.7之间的区别使以下代码明确:

#include <iostream>

void foo(int i)            { std::cout << "foo(int)" << std::endl; }
void foo(unsigned short i) { std::cout << "foo(unsigned short)" << std::endl; }

int main()
{
    foo(static_cast<short>(1));
}
  • shortint 是晋升(因此具有晋升等级)
  • shortunsigned short 是转换(因此具有转换等级)

最后,该代码调用 foo(int) 因为它是一个更好的候选人。

其他提示

促销在算术和其他操作期间发生。当仅在另一个内部存储一个积分类型时,就会发生转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top