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