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