Selon le projet de norme N4713 (7.11/1) :
Une constante de pointeur nulle est un littéral entier (5.13.2) de valeur zéro ou une prvalue de type
std::nullptr_t
.
et 21.2.3/2 :
La macro
NULL
est une constante à pointeur nul définie par l'implémentation.
suivre cela NULL
peut être définie comme suit nullptr
. La même chose est mentionnée sur cppréférence :
#define NULL 0
//since C++11
#define NULL nullptr
Dans le même temps, la clause "Opérateurs additifs" stipule (8.5.6/7) :
Si la valeur
0
est ajouté ou soustrait à une valeur de pointeur nulle, le résultat est une valeur de pointeur nulle. Si deux valeurs sont soustraites, le résultat est égal à la valeur0
converti au typestd::ptrdiff_t
.
Le code suivant devrait donc être valide :
0 + nullptr;
nullptr - nullptr;
mais en raison de l'absence d'opérateurs +/- pour les std::nullptr_t
les le code n'est pas valide .
Y a-t-il quelque chose que je n'ai pas pris en compte ? NULL
ne peut pas être définie comme nullptr
?
1 votes
Oui, c'est possible. [[[[[[[[[[
0 votes
"Y a-t-il quelque chose que je n'ai pas pris en compte", oui, que l'on peut ajouter 0 au 0 littéral.
8 votes
Pointeur nul valeur et le pointeur nul constante sont deux choses très différentes.
0 votes
@n.m : La distinction entre pointeur ,
nullptr_t
y littéral 0 est important, oui. Mais si l'on considère "or a prvalue of type std::nullptr_t", êtes-vous en train de soutenir qu'une prvalue n'est pas une valeur ? C'est absurde.0 votes
Pour enfoncer le clou, la norme définition est "A null pointer constant is ... a prvalue of type std::nullptr_t" (les points représentent le cas de literal, ce qu'il peut également être).
5 votes
@Cheersandhth.-Alf C'est une valeur mais il ne s'agit pas d'une "valeur de pointeur nulle".
1 votes
@Cheersandhth.-Alf Bien sûr, c'est une valeur, de type
std::nullptr_t
qui n'est pas un type de pointeur, il n'y a donc aucune raison de l'appeler "valeur de pointeur nulle" (ce n'est pas du tout une valeur de pointeur). Quoi qu'il en soit, la clause "Opérateurs additifs" énumère les types qui peuvent participer aux opérateurs additifs, etstd::nullptr_t
n'en fait pas partie, doncstd::nullptr - std::nullptr
est invalide, que vous appeliezstd::nullptr
"une valeur de pointeur nulle" ou non.0 votes
Windows dit non :(
0 votes
En rapport C++ : Comparer la valeur de retour d'une fonction C à NULL ou nullptr ?