Bonjour tous le monde
Comment declare-on un Null pointer en c++ ?
Version imprimable
Bonjour tous le monde
Comment declare-on un Null pointer en c++ ?
Code:
1
2T* ptr = NULL;
Salut mima_mine,
Je crois que "= 0" est plus utilisé que NULL.
À la limite que NULL est utilisé principalement dans le cas d'un pointeur mis à NULL. Pour tous les autres cas, ce serait plutôt "=0".
Bref, les deux se font et reviennent plutôt au même à ma connaissance!
Non, parce que t'es pas sur que le define sur ton compilo ressemble à ça :
#define NULL 0
En pratique, le define n'a pas le droit de ressembler à autre chose à partir du moment où tu utilise un tant soit peu la bibliothèque standard...
Bientôt:
En attendant, j'utilise 0 plutôt que NULL. Je trouve que ça a plus de gueule avec 0Code:T* ptr = nullptr;
Salut,
A vrai dire, je suis pas loin d'estimer préférable d'utiliser NULL autant que faire se peut... Du moins, en attendant que la nouvelle norme nous donne nullptr.
La raison est bien simple: NULL est clairement associé à un pointeur dans l'esprit des gens, alors que 0 est plutôt associé à... une valeur numérique.
Comme nous savons tous qu'il n'y a pas forcément référence, dans la manière de nommer une variable, au fait que c'est en réalité un pointeur, et non une variable numérique quelconque, je me dis que NULL présente l'énorme avantage d'être plus explicite et de fournir une "piqure de rappel" à l'utilisateur sur le fait qu'il est occupé à manipuler un pointeur...
Maintenant, je n'en suis malgré tout pas à faire la chasse à tous les
T * ptr=0; pour les remplacer par T * ptr=NULL; ;)
:rire:
+1 toutefois. J'avais écrit un petit truc dessus : http://blog.developpez.com/alp/p6254...le-pointeur-n/
Hum, j'ai rêver donc car il me semble avoir croisé du :
#define NULL (void*)0
Quoiqu'il en soit 0 ou NULL c'est pas bien méchant par contre du int i = NULL; :') ça c'est bien moche.
Sinon pour revenir sur ma réponse : le PO faisant une grammaire du C++ il me semble, j'ai étais directement à l'essentiel plutôt que de débattre sur les bonnes pratiques ou non (vu que ça l'intéresse pas).
C'est non conforme en C++ (en C, je ne sais pas). Ce qui ne vaut pas dire que personne ne le faitVoir l'équipe STL de Microsoft qui ont essayé de remplacer #define NULL 0 par #define NULL nullptr, et qui ont eu des surprises du genre que tu viens de citer...
Petit up, je suis retombé dessus finalement et en effet c'est la macro du C qui est comme ça :En C++ c'est juste 0 pour la bonne raison qu'avec la macro au dessus ce genre de chose ne compilerait pas :Code:
1
2#define NULL ((void*)0)
Code:
1
2 std::vector<int>* foo = NULL; // cannot convert void* to std::vector<int, allocator<int>>*
En C, ce peut etre 0 ou (void*)0 et on peut remplacer 0 par n'importe quelle constante entiere de valeur nulle (ce qu'on peut faire en C++ aussi); 0L a deja ete utilise.
http://www.bourguet.org/v2/clang/lib...602aa8c308d0c4