Quel est le type de constante d'énumération lorsqu'elle est utilisée en dehors d'une définition d'énumération non délimitée?L'énumérateur utilisé dans l'expression a-t-il le même type que le type sous-jacent de son énumération?
Considérez le code suivant:
#include <iostream>
enum modes
{
begin = 0,
end = 1
};
int main()
{
std::cout << std::boolalpha
<< std::is_same<unsigned int, typename std::underlying_type<modes>::type>::value
<< std::endl;
std::cout << sizeof(modes) << std::endl;
std::cout << (-100 + end) << std::endl;
}
Cela donne sur ma machine:
true
4
-99
Maintenant, si je change seulement la valeur d'une autre recenseur, begin
à 2147483648
, ma sortie devient:
true
4
4294967197
Apparemment, cela signifie que le type de end
est passé de int
à unsigned int
, même le type sous-jacent de modes
est toujours le même (c.-à-d. unsigned int
).
Existe-t-il des règles spéciales pour les promotions intégrales concernant les enums?
"peut être converti en une prvalue du premier des types suivants pouvant représenter toutes les valeurs de l'énumération". C'est précisément ce que je cherchais. Je vous remercie. –