34 votes

Pourquoi reinterpret_cast ne peut-il pas convertir un int en int?

Mon compilateur est le dernier VC ++ 2013 RC.

 void f()
{
    int n1 = 0;
    int n2 = reinterpret_cast<int>(n1); // error C2440
}
 

erreur C2440: 'reinterpret_cast': impossible de convertir de 'int' en 'int'

Pourquoi reinterpret_cast ne peut-il pas être utilisé dans un cas aussi évident?

29voto

Jefffrey Points 31698

Conformément à cppreference.com la conversion suivante n'est disponible que depuis C++11:

Une expression de l'intégrale, l'énumération, pointeur, pointeur ou de membre type peut être converti en son propre type. La valeur résultante est la même comme la valeur de l'expression.

qui ne peut pas être mis en œuvre dans Visual Studio 2013 RC encore.

24voto

SingerOfTheFall Points 9936

La norme C ++ dit (5.2.10.2) (c'est moi qui souligne):

L'opérateur reinterpret_cast ne doit pas rejeter la constance (5.2.11). Une expression de type intégral, énumération, pointeur ou pointeur vers membre peut être explicitement convertie en son propre type ; une telle distribution donne la valeur de son opérande.

Donc, je dirais que c'est un bug.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X