C++之父的C++圣經《C++程序設計語言 特別版》中說:
大家不要聽某些人說判斷指針是否為空用(p==NULL)或(p!=NULL)的格式,C++之父認為這樣寫是不好的,提倡直接寫(p)或(!p)的形式。?在win32開發(fā)中,if
( NULL == p )是極好的寫法。但不要寫成:if ( p == NULL )?
C++之父主要是反對使用“NULL”,因為在某些特殊的開發(fā)環(huán)境叫,“NULL”并非補定義成地址0,也可能是一個跟平臺相關的,用于標記非法地址的其它地址。
但按照C++標準的規(guī)定,只有等于0的地址可以被隨便delete多次,因此如果是別的地址,那至少C++標準就給不了任何說法。至于是if(p == 0)和if(p != 0),還是if(p)或者if(!p),這個找不出什么重大區(qū)別,個人覺得。
不過,從代碼的可擴展性上講,寫成后者可能好一些,因為如果有一天你決定改用一些原生指針的包裝類(比如類似那種auto_ptr模板的)來代替直接操作原生指針,而那個類可能重載了operator!,后者可能讓你直接利用這些設施?林銳提倡if ( p
== NULL )是從代碼的可讀性上考慮的,一看就是在判斷一個指針,而不是判斷一個bool值,它提倡只有bool值才使用if(p)或者if(!p)的形式。
BS是從可移植方面考慮。
if( p == NULL ),一眼就可以看出這是在判斷一個指針,但如果寫成if(!p),那你必須要知道p倒底是什么才能知道這個判斷的含義。另外,不要寫成if( p == NULL )這樣的形式,應該寫成:if ( NULL == p )。
如果你誤寫成了if ( NULL = p ),那編譯時就會提示你,但如果是前者,這個錯誤就隱藏起來了。