2013-07-21 19 views
5

In C++, wir in der Regel einen Zeiger prüfen, ob null oder nicht, ich weiß nur, dass wirNULL == Zeiger

if(NULL == ptr) 

statt verwenden sollten:

if(ptr == NULL) 

Ich möchte wissen, warum?

In Additiol, wenn wir ein Ptr auf null initialisieren wollen, sollten wir oder ptr = 0 verwenden? Ja, ich weiß in C++, wir verwenden normalerweise , ich möchte wissen, warum sollen wir das nur tun wollen, um den Code zu vereinheitlichen? Dank

+6

Ich schreibe normalerweise 'if (! Ptr)'. Es ist kürzer und weniger redundant. – glglgl

+0

Ich bin etwas verwirrt hier, ob Ihre Frage ist, warum können Sie 'NULL == ptr' anstelle von' ptr == NULL' nicht verwenden oder Ihre Frage ist, warum können Sie '=' anstelle von '== verwenden '? – Ravi

+0

Ich fragte zwei Fragen – minicaptain

Antwort

12

Es ist eine Art der Programmierung (benannt Yoda Conditions) Schreiben = statt == in einer if-Anweisung zu vermeiden, ist es gültige Zuordnung = in einer if-Anweisung zu verwenden, aber es ist in der Regel nicht, was Sie wollen.

Persönlich bevorzuge ich es nicht so zu verwenden, weil es schwer zu lesen ist und moderne Compiler werden Sie warnen, wenn Sie = in einer if-Anweisung verwenden.

Beachten Sie auch, dass:

  1. if(ptr == NULL) das gleiche mit if(!ptr) ist.
  2. C++ 11 eingeführt nullptr zu ersetzen mit NULL. So einen Null-Zeiger zu initialisieren, es vorzuziehen ist ptr = nullptr

Über zu verwenden, warum verwenden nullptr über NULL:

Bevor C++ 11 wird NULL in der Regel intern als #define NULL 0 implementiert, aber das Problem ist, 0 ist auch die ganze Zahl Null. Dies kann in einigen Situationen zu Problemen führen. Zum Beispiel:

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

func(NULL); //call which function? 

Obwohl die auther impliziert, dass NULL ein Zeigertyp ist, aber der Compiler weiß nur func(0) zu nennen. Also wird die erste Version aufgerufen.

Mit func(nullptr) wird der Compiler wissen, es ist ein Zeiger und rufen Sie die zweite Version.

+0

+1, aber ich würde darauf hinweisen, dass das Problem ist, dass '= ist Zuordnung * sogar in einer bedingten - das verwirrt oft Anfänger. Dies wird immer in dieser Antwort angenommen, aber niemals explizit angegeben. –

+1

Es ist 'nullptr', nicht' null_ptr'. –

+0

ja in meiner zweiten Frage, ich weiß, wir sollten nullptr verwenden, möchte ich wissen, warum? Wollen Sie nur den Code-Stil vereinheitlichen? – minicaptain

1

Mit yoda Gleichheit verhindert es bestimmte Fehler wie die Verwendung einer einzigen = oder wo der Compiler versucht, eine ganze Zahl von einem Smart-Zeiger zu bestimmen.

Es wurde

bekannt

Ich verbrachte Tracking 2 Tage nach unten, dass Fehler, wie sie denken yoda eine schlechte Idee ist.