Dans la section 10.5.1 du nouveau livre de Stroustrup intitulé "The C++ Programming Language - Fourth Edition", il indique qu'avant d'effectuer une opération arithmétique, la promotion intégrale est utilisée pour créer des ints à partir de types d'entiers plus courts, et de la même manière, la promotion flottante est utilisée pour créer des doubles à partir de flottants.
J'ai confirmé la première affirmation avec le code suivant :
#include <iostream>
#include <typeinfo>
int main()
{
short a;
short b;
std::cout << typeid(a + b).name() << std::endl;
}
Cela produit "int" avec vc++ et "i" avec gcc.
Mais en le testant avec des flottants au lieu de shorts, la sortie est toujours "float" ou "f" :
#include <iostream>
#include <typeinfo>
int main()
{
float a;
float b;
std::cout << typeid(a + b).name() << std::endl;
}
Selon Stroustrup, il n'y a pas d'exception à la règle de promotion de la virgule flottante, donc je m'attendais à un résultat "double" ou "d".
La section mentionnée concernant les promotions est-elle erronée ou peu claire ? Et y a-t-il une différence entre C++98 et C++11 en ce qui concerne les promotions de type ?