最近1直在看由電子工業(yè)大學(xué)出版的呂老師編寫的c《++語言程序設(shè)計(第3版)》,其中的程序代碼書寫我其實不知道有1定的缺點,我1直沉醉在他的書中,居然沒有再去看看其他的版本,原來新的C++已明確提出不提倡用的1些規(guī)定這本書還在用,也是我在最近的做題墮入了1定的窘境,很愁悶,后來在標(biāo)準(zhǔn)的習(xí)題中了解了1些編程代碼書寫規(guī)范。今天就好好學(xué)習(xí)1下標(biāo)準(zhǔn)的代碼書寫。
先來看看舊版的C++編程風(fēng)格(就是目前我學(xué)的這本書)
這類的編程風(fēng)格也是我1直在使用的,原來存在局限性,也是將要被替換的,雖然說在VC++6.0中仍然可以運行,但是在其他的編程軟件中就不再適用了,例如VS2010等等。
再來看看新的C++的編程的書寫:
原來這才是與時俱進的新C++編程代碼的規(guī)范書寫,那就來看看二者的區(qū)分:
1.頭文件包括命令的不同,舊版的為#include <iostream.h>當(dāng)使用<iostream.h>時,相當(dāng)于在c中調(diào)用庫函數(shù),使用的是全局命名空間,也就是初期的c++實現(xiàn)。而新C++的#include <iostream>當(dāng)使用< iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。
#include <iostream.h>
using namespace std; 則出錯
所以 要末寫成
#include <iostream >
using namespace std;
要末寫成
#include <iostream.h>
固然最好是前種
2.主函數(shù)的返回值類型的不同,舊版的為void main(),而新C++為int main(),嚴(yán)格的還要在主函數(shù)的函數(shù)體最后1行加上return 0;要不然會出現(xiàn)正告錯,雖然不影響程序的運行,但是按良好的編程風(fēng)格來講加上是最好的。
二者的區(qū)分還有:
1.舊的C++頭文件是官方所反對使用的(即,明確列出不再支持),但舊的C頭文件則沒有(以保持對C的兼容性)。舊的C++頭文件名如<iostream.h>將會繼續(xù)被支持,雖然它們不在官方標(biāo)準(zhǔn)中。這些頭文件的內(nèi)容不在名字空間std中。新的C++頭文件如<iostream>包括的基本功能和對應(yīng)的舊頭文件相同,但頭文件的內(nèi)容在名字空間std中。(在標(biāo)準(zhǔn)化的進程中,庫中有些部份的細(xì)節(jié)被修改了,所以舊頭文件和新頭文件中的實體不1定完全對應(yīng)。)
2.所謂namespace,是指標(biāo)識符的各種可見范圍。C++標(biāo)準(zhǔn)程序庫中的所有標(biāo)識符都被定義于1個名為std的namespace中.
由于namespace的概念,使用C++標(biāo)準(zhǔn)程序庫的任何標(biāo)識符時,可以有3種選擇:
(oct 8進制 dec 10進制 hex 106進制)
(1)、直接指定標(biāo)識符。例如std::ostream而不是ostream。完全語句以下:
std::cout << std::hex << 3.4 << std::endl;
(2)、使用using關(guān)鍵字。
using std::cout;
using std::endl;
以上程序可以寫成
cout << std::hex << 3.4 << endl;
(3)、最方便的就是使用using namespace std;
例如:
#include <iostream>
using namespace std;
這樣命名空間std內(nèi)定義的所有標(biāo)識符都有效(暴光)。就好像它們被聲明為全局變量1樣。那末以上語句可以以下寫:cout << hex << 3.4 << endl;
3.<iostream>和<iostream.h>是不1樣,前者沒有后綴,實際上,在你的編譯器include文件夾里面可以看到,2者是兩個文件,打開文件就會發(fā)現(xiàn),里面的代碼是不1樣的。
后綴為.h的頭文件c++標(biāo)準(zhǔn)已明確提出不支持了,早些的實現(xiàn)將標(biāo)準(zhǔn)庫功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標(biāo)準(zhǔn)為了和C區(qū)分開,也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。
因此,當(dāng)使用<iostream.h>時,相當(dāng)于在c中調(diào)用庫函數(shù),使用的是全局命名空間,也就是初期的c++實現(xiàn);當(dāng)使用<iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。
4.在標(biāo)準(zhǔn)C++之前,都是用#include<iostream.h>這樣的寫法的,由于要包括進來的頭文件名就是iostream.h。標(biāo)準(zhǔn)C++引入了名字空間的概念,并把iostream等標(biāo)準(zhǔn)庫中的東東封裝到了std名字空間中,同時為了不與原來的頭文件混淆,規(guī)定標(biāo)準(zhǔn)C++使用1套新的頭文件,這套頭文件的文件名后不加.h擴大名,如iostream等等,并且把原來C標(biāo)準(zhǔn)庫的頭文件也重新命名,如原來的string.h就改成cstring(就是把.h去掉,前面加上字母c),所以頭文件包括的寫法也就變成了#include
<iostream>。
其實不是寫了#include<iostream>就必須用using namespace std;我們通常這樣的寫的緣由是為了1下子把std名字空間的東東全部暴露到全局域中(就像是直接包括了iostream.h這類沒著名字空間的頭文件1樣),使標(biāo)準(zhǔn)C++庫用起來與傳統(tǒng)的iostream.h1樣方便。如果不用using namespace std;使用標(biāo)準(zhǔn)庫時就得時時帶上名字空間的全名,如std::cout << "hello" << std::endl;為了方便的書寫,就加上了using namespace
std。這樣可以更好的讀懂編寫的程序代碼。