[英]Are the “usual arithmetic conversions” and the “integer promotions” the same thing?
[英]What's the difference between integer promotions and integer conversions in C++
C ++标准的第4.5节(整数提升)讨论了将整数类型转换为具有更高排名的类型的特定情况。
C ++标准的第4.7节(整数转换)以(bullet 4.7.1)开头:
整数类型的右值可以转换为另一个整数类型的右值。 枚举类型的右值可以转换为整数类型的右值。
据我所知,4.5中描述的转换(可能除了子弹4.5.3(枚举))可以使用4.7节中的技术来执行:4.5.1和4.5.2完全由4.7.1涵盖; 4.5.4涵盖4.5.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));
}
short
为int
是促销(因此具有晋升级别) short
unsigned short
是转换(因此具有转换等级) 最后,这段代码调用foo(int)
因为它是一个更好的候选者。
促销在算术和其他操作期间发生。 仅在将一个整体类型存储在另一个内部时发生转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.