J'ai vu la macro ci-dessous dans le fichier d'en-tête le plus élevé :
Vous ne devriez pas avoir vu cela, la bibliothèque standard le définit dans <cstddef>
(et <stddef.h>
). Et, IIRC, selon la norme, la redéfinition des noms définis par les fichiers d'en-tête standard entraîne un comportement non défini. Donc, d'un point de vue purement standard, vous ne devriez pas le faire.
J'ai vu des gens faire ce qui suit, pour n'importe quelle raison à laquelle leur esprit brisé a pensé :
struct X{
virtual void f() = NULL;
}
(Comme dans [incorrect] : "mettre le pointeur de la table virtuelle à NULL
")
Ceci n'est valable que si NULL
est défini comme suit 0
parce que = 0
est le jeton valide pour les fonctions purement virtuelles ( §9.2 [class.mem]
).
Cela dit, si NULL
était correctement utilisé comme une constante à pointeur nul, alors rien ne devrait casser.
Attention toutefois, même si elle semble être utilisée correctement, elle peut changer :
void f(int){}
void f(char*){}
f(0); // calls f(int)
f(nullptr); // calls f(char*)
Cependant, si c'était le cas, il était certainement cassé de toute façon.