Nytt reserverat ord – nullptr

Man kan kanske betrakta det som en mindre korrigering att standarden nu introducerar det reserverade ordet nullptr .  I C++  är 0 tillåtet värde för en null-pekare men ofta används macrot NULL, definierad som 0, för att uttrycka att det gäller en pekare.

Men 0 är ju av typen int så vid överlagring kan det bli så här:

void func(int);
void func(char *);

Anropet, func(NULL), kommer anropa func(int), vilket kanske inte var det man hade tänkt sig.

Nu känns exemplet lagom konstruerat, och lär inte ske så ofta i praktiken, men det är onekligen ett problem. Kanske är det viktigare att det nu finns ett reserverat ord att använda för null-pekaren så att NULL eller 0 inte längre behövs i det syftet.

Utöver detta så har nullptr den semantik man man förvänta sig av en null-pekare. Om nullptr används i ett sammanhang med boolska värden så har den värdet falskt. Här har man tänkt på likheten med den gamla pekarhanteringen. Så här är det:

bool trueValue = !nullptr;
bool falseValue = nullptr;

Notera också att 0 fortfarande gäller som ett giltigt värde för en null-pekare. Så nullptr kommer inte att göra mycket gammal kod obrukbar, om ens någon. Man har värdesatt bakåtkompatibiliteten i det här fallet.

 

Publicerad i C/C++

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com