Comment faire de C++ les pointeurs null
Tout en déclarant tous les pointeurs c++, tout devrait par défaut être initilized à ZÉRO ou la valeur NULL pour éviter tout aléatoire des valeurs indésirables. Afin que nous puissions vérifier si le pointeur est null, ce qui signifie pas de initilized.
grâce
Cela semble être une affirmation qu'une question. Que demandez-vous?
Et votre question est?
Umm..
Veuillez soumettre votre langue-comportement-les demandes de changement de la C++ Standard Comité, pas de Débordement de Pile.
Et votre question est?
Umm..
int* p = NULL;
est que ce que vous demandez?Veuillez soumettre votre langue-comportement-les demandes de changement de la C++ Standard Comité, pas de Débordement de Pile.
OriginalL'auteur Vijay | 2011-03-24
Vous devez vous connecter pour publier un commentaire.
En C++03, préférez
ptr = 0
surptr = NULL
(Bjarne S. dit que. Lire l'extrait ci-dessous cité de son site)Dans C++0x,
ptr = nullptr
(voir cette)Bjarne Stroustrup dit que,
Je n'ai jamais assez d'accord avec les conseils d'utilisation littérale 0 au lieu de
NULL
en C++03. ÉcritNULL
est sémantiquement plus riche: il est immédiatement clair que la valeur est un pointeur plutôt que mathématique de la quantité. (Les deux sont très différents, malgré tous les deux représentés par des entiers machines.)Je pense que c'est une question d'habitude de voir
NULL
partout. Une fois que les gens ont l'habitude de voirp=0
, il semblerait que sémantiquement plus riche, comme vous le pensezNULL
est!c'est juste plus difficile à
grep
ou autrement reconnaître avec de simples scripts... non pas que ce qui compte vraiment pour de simples scripts peuvent pas gérer le C++ riche de la syntaxe. @Wyzard: je crois que la définition de laNULL
macro ont été conçus pour C et ne pouvait pas être compilé par un compilateur C++, car il a une plus forte type de système. Ne sais pas si.OriginalL'auteur Nawaz
ou
OriginalL'auteur Alex Deem
Vous pouvez les faire
NULL
par l'affectation deNULL
ou0
.C et C++ variables de ne pas initialiser automatiquement. Si ils l'ont fait, et que vous vouliez les mettre à un aucun-
NULL
valeur, la langue ne serait pas aussi efficace car ils pourraient être initialisé à deux reprises.Que faire si vous le souhaitez initialisé plus tard? Je n'ai pas vraiment considérer cela comme un problème à résoudre. Le C et le C++ sont de niveau inférieur langues qui vous donnent plus de contrôle sur ce qui se passera "sous les couvertures". Plus le rendement est atteint lorsque le compilateur génère automatiquement moins de code. J'ai utilisé le C et le C++ pour plus d'années que je me soucie de mentionner. Ce comportement a bien fonctionné pour moi. Si vous voulez une variable initialisée, vous l'initialiser.
Quel est le problème avec initialisation automatique à 0 et la fin de l'initialisation effectivement une cession? Ce n'est pas comme vous d'écraser une valeur d'utilité, mais si, initialement, 0 le pointeur est au moins dans un état. Je comprends votre point, mais chaque fois que je vois un code C avec de nombreuses déclarations de pointeur au début de la fonction, ils sont tous manuellement initialisé à NULL de toute façon. J'ai pas encore rencontré un (bien écrit) le morceau de code où l'auteur intentionnellement laissée en un pointeur non affectées pour des raisons de performance.
OriginalL'auteur Jonathan Wood
Que vous avez à faire vous-même:
Sonne comme ce que vous voulez vraiment est un pointeur intelligent, qui va attraper ces sortes de bugs pour vous. Il y a plusieurs choix à partir de.
OriginalL'auteur Rob Agar
C'est le comportement par défaut de pointeurs intelligents tels que C++(C ++ 0x)
std::scoped_ptr<T>
et (Boost)boost::shared_tr<T>
. Si vous n'avez pas utiliser des pointeurs intelligents, vous obtenez stupide comportement.OriginalL'auteur MSalters
Il y a au moins deux principes de C++ qui est en conflit avec la proposition.
1) Ne pas ajouter une nouvelle fonctionnalité à la langue, si elle dispose déjà d'un fetaure vous pouvez utiliser.
n'est pas assez grande de problème pour changer la langue.
2) Nous ne voulons pas de code C pour être plus rapide!
Si
où plus rapide en C qu'en C++, l'ensemble de l'internet est plein de cette "référence".
OriginalL'auteur Bo Persson
Pas. C'est juste du temps perdu si vous allez initialiser de toute façon et le flux de votre code est telle que vous pouvez être sûr qu'ils sont initialisés avant qu'ils soient utilisés.
Je ne dis pas qu'ils devraient jamais être initialisé. Tout simplement pas s'ils vont être immanent de l'installation avant toute autre accès est possible. Peut-être que j'ai été en utilisant le mot "si" de façon incorrecte?
Non, vous avez utilisé le mot correctement. Tant qu'il est évident que les pointeurs est initialisé avant de l'utiliser, il être du temps perdu. J'ai été à la programmation dans une certaine forme de C pour de nombreuses années, et cela a bien fonctionné pour moi.
OriginalL'auteur Vagrant