NULL VS NULLPTR (Waarom werd het vervangen?)

Ik weet dat in C++ 0xof NULLwerd vervangen door nullptrin Pointer-gebaseerde applicaties. Ik ben gewoon benieuwd naar de exacte reden waarom ze deze vervanging hebben gemaakt?

In welk scenario gebruikt nullptrover NULLnuttig bij het omgaan met Pointers?


Antwoord 1, Autoriteit 100%

nullptris altijd een wijzertype. 0(aka. C’s NULL overbrugd in C++) kan onder meer ambiguïteit in overbelaste functie-resolutie veroorzaken, onder andere:

f(int);
f(foo *);

Antwoord 2, Autoriteit 22%

U kunt een goede uitleg vinden van waarom het is vervangen door het lezen van Een naam voor de NULL-aanwijzer: NULLPTR , om het papier te citeren:

Dit probleem valt in de volgende categorieën:

  • Verbeter de ondersteuning voor het bibliotheekgebouw, door een manier te bieden voor gebruikers om minder ambigue code te schrijven, zodat de schrijvers in de tijd geen zorgen hoeven te maken over overbelasting op integrale en aanwijzers.

  • Verbeter de ondersteuning voor generieke programmering door het gemakkelijker te maken om zowel integer 0 als nullptr ondubbelzinnig uit te drukken.

  • Maak C++ gemakkelijker te leren en te leren.


Antwoord 3, Autoriteit 16%

Hier is Bjarne Stroustrup’s Wordings,

In C++ is de definitie van NULL 0, dus er is alleen een esthetisch verschil. Ik vermijd liever macro’s, dus ik gebruik 0. Een ander probleem met NULL is dat mensen soms ten onrechte denken dat het anders is dan 0 en/of geen geheel getal. In pre-standaard code werd/wordt NULL soms gedefinieerd als iets dat ongeschikt is en daarom moest/moet worden vermeden. Dat is tegenwoordig minder gebruikelijk.

Als je de null-pointer een naam moet geven, noem hem dan nullptr; dat is wat
het heet in C++11. Dan zal “nullptr” een sleutelwoord zijn.


Antwoord 4, autoriteit 5%

Eén reden: de letterlijke 0heeft een slechte neiging om het type intte verwerven, b.v. in perfect argument forwarding of meer in het algemeen als argument met sjabloontype.

Een andere reden: leesbaarheid en duidelijkheid van code.

Other episodes