Est NULLE définie comme nullptr en C++11?
Va C++11 implémentations de définir NULL
comme nullptr
?
Serait-ce prescrites par la nouvelle norme C++?
- La norme dit que c'est permis; mais quelques implémentations sont susceptibles de le faire réellement.
Vous devez vous connecter pour publier un commentaire.
De la bouche des chevaux
C'est à chacun de mise en œuvre pour fournir sa propre définition, gcc si je me souviens bien, la définit à
__nullptr
pour qui il a des vérifications spéciales (vérifie qu'il n'est pas utilisé dans l'arithmétique de contextes, par exemple).De sorte qu'il est possible de la définir comme
nullptr
, vous devrez vérifier votre compilateur/Standard de la Bibliothèque de documentation pour voir ce qui a été fait.nullptr
, même si ce changement a été proposé.Non, la valeur NULL est toujours le même qu'avant. Trop de personnes ont utilisé la macro NULL de manière surprenante, de la redéfinir à nullptr aurait brisé beaucoup de code.
D'élaborer: les gens ont utilisé la valeur NULL par exemple pour de nombreux types de poignée typedefs. Si le type réel derrière un typedef n'est pas un pointeur, la définition de la valeur NULL comme nullptr serait un problème. Aussi, il semble que certaines personnes ont en effet utilisé la valeur NULL pour initialiser les types numériques.
Au moins c'est ce que Microsoft a découvert quand ils ont ajouté la nullptr à MSVC10, et pourquoi ils ont décidé de garder la valeur NULL comme il l'a toujours été. D'autres compilateurs pourrait choisir un autre chemin, mais je ne pense pas qu'ils le feraient.
'\0'
). Personnellement ça ne me dérangerait pas de rupture d'un tel code, mais la compatibilité ascendante est une maîtresse exigeante.FDIS de la future norme C++11, expression intégrale est toujours un pointeur null
constante. NULL macro est toujours de mise en œuvre défini, mais il doit être null
pointeur constant. Donc, dans la pratique, cela signifie qu'il est bon que 0 ou peut-être
nullptr.
Votre code qui est utilisé soit 0 ou NULL fonctionnera comme avant.
Lire les détails ici.
The next revision of C++ that we’ve been calling “C++0x” is now an International Standard!”
C++11
.int i = NULL;
ne fonctionne plus lorsque la valeur NULL est défini comme nullptr, ce qui est permis. Le Code à l'aide NUL ne "marchera" pas comme avant" sur certains compilateurs si votre réponse est fausse.