在 Stroustrup 的新书“C++ 编程语言 - 第四版”的 10.5.1 节中,他说,在执行算术运算之前,整数提升用于从较短的整数类型创建整数,类似地,浮点提升是用于从浮点数中创建双打。
我使用以下代码确认了第一个声明:
#include <iostream>
#include <typeinfo>
int main()
{
short a;
short b;
std::cout << typeid(a + b).name() << std::endl;
}
这将使用 vc++ 输出“int”,使用 gcc 输出“i”。
但是用浮点数而不是短裤测试它,输出仍然是“float”或“f”:
#include <iostream>
#include <typeinfo>
int main()
{
float a;
float b;
std::cout << typeid(a + b).name() << std::endl;
}
根据 Stroustrup 的说法,浮点提升规则没有例外,所以我期望“double”或“d”作为输出。
提到的关于促销的部分是错误的还是不清楚?C++98 和 C++11 在类型提升方面有什么不同吗?