Un de mes collègues a demandé si il n’y a non signé en double et je l’ai dit il n’existe pas, mais je l’ai vérifié encore, et il compile dans Microsoft Visual C++ 2010:
Elle génère . Autrement dit, quatre octets pour les
et huit octets de `` .
Un de mes collègues a demandé si il n’y a non signé en double et je l’ai dit il n’existe pas, mais je l’ai vérifié encore, et il compile dans Microsoft Visual C++ 2010:
Elle génère . Autrement dit, quatre octets pour les
et huit octets de `` .
unsigned double
n'est pas valide. Cela est également vrai dans MSVC.
Lors de la compilation le code ci-dessus dans MSCV 2010 avec des avertissements activé, vous bénéficiez de:
warning C4076: 'unsigned' : can not be used with type 'double'
Le compilateur fait ignore double
après unsigned
, ce qui rend votre a
fait un unsigned int
.
Si vous essayez ce qui suit:
unsigned double a = 1.0;
Vous obtenez en fait deux mises en garde:
warning C4076: 'unsigned' : can not be used with type 'double'
warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
Fait intéressant, il n'y a pas de C4076 avertissement dans MSDN pour VS2010. Il est présent uniquement pour VS2005 et VS2008.
Si vous définissez le niveau d’alerte plus élevé (/ W3 dans mon test), vous obtiendrez un avertissement approprié :
AVERTISSEMENT C4076 : « unsigned » : ne peut pas être utilisé avec le type « double »
Si vous utilisez ensuite le débogueur pour inspecter la variable, tout devient clair :
Vous pouvez voir que la variable est en fait un``
Combinant unsigned
avec double
dans la déclaration spécificateur de séquence n'est pas valide en C++. Ce doit être un MSVC extension (ou bug) d'une certaine sorte.
En règle générale, plus d'un type de spécificateur est autorisé dans les decl-spécificateur-séquence d'une déclaration ou à un type de spécificateur-seq ou de fuite de type spécificateur-seq. Les seules exceptions à cette règle sont les suivantes:
const
peut être combiné avec n'importe quel type de prescripteur, sauf lui-même.volatile
peut être combiné avec n'importe quel type de prescripteur, sauf lui-même.signed
ouunsigned
peut être combiné avec d'char
,long
,short
ouint
.short
oulong
peut être combiné avec d'int
.long
peut être combiné avec d'double
.long
peut être combiné avec d'long
.
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.