C++語法總結(jié)之談
在講解C++中的C++語法之前,先讓大家理解下C與C++之間的區(qū)別,C和C++ C++源于C。 C:面向結(jié)構(gòu)的程序設(shè)計(jì)語言。 C++:面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。 C++繼承C語言的優(yōu)點(diǎn),同時增加面向?qū)ο筇匦浴?
C++程序的組成
(1)預(yù)處理命令
以#開頭。三類預(yù)處理命令。
A 宏定義命令。
B 文件包含命令。
C 條件編譯命令。
(2)語句
(3)輸入和輸出
(4)變量
(5)函數(shù)
語言符號
在C++語法中,編譯器識別的基本元素是“語言符號”,一個語言符號是編譯器不能分成組成成分元素的源程序文本。
語言符號包括:關(guān)鍵詞、標(biāo)識符、常量、字符串文字、運(yùn)算符、標(biāo)點(diǎn)字符。
空白字符
空格、制表、換行、回車、換頁、縱向制表 (vertical tab)和換行(newline)字符都稱為空白字符(white-space),因?yàn)樗鼈兙哂邢嗤墓δ堋<醋鳛榇蛴№撋蠁卧~和行之間的空白,使其更容易閱讀。通過空白字符和其它語言符號,例如運(yùn)算符和標(biāo)點(diǎn),從而對語言符號進(jìn)行定界。
當(dāng)對代碼進(jìn)行詞法分析時,C++編譯器忽略空白字符,除非使用它們作為分隔符或者字符常量或字符串文字的組成成分。使用空白字符使程序更具可讀性。 注意編譯器也把注釋作為空白字符處理。
首先重復(fù)一句Bjarne的話:“我們的系統(tǒng)已經(jīng)是極度復(fù)雜的了,為了避開C++的復(fù)雜性而干脆不用C++(Linus的做法),無異于因噎廢食。”在所有可用C和C++的領(lǐng)域,C++都是比C更好的語言。當(dāng)我說“更好的”時候,我說的是C++擁有比C更安全的類型檢查、更好的抽象機(jī)制、更優(yōu)秀的庫。
當(dāng)然,凡事都有例外,如果你做的項(xiàng)目1)不大。2)編碼中用不到什么抽象機(jī)制,甚至ADT(抽象數(shù)據(jù)類型,例如std::complex這種不含多態(tài)和繼承的)也用不到,RAII也用不到,異常也用不到。3)你連基礎(chǔ)庫(如,簡化資源管理的智能指針、智能容器)都用不著。
那么也許你用C的確沒問題;所以如果你的情況如此,不用和我爭論,因?yàn)槲覠o法反駁你。我們這里說的領(lǐng)域大致是Bjarne在“C++應(yīng)用列表”里面列出來的那些地方。 底線是:如果把C++中的諸多不必要的復(fù)雜性去掉,留下那些本質(zhì)的,重要的語言特性,簡化語言模型,消除歷史包袱。
即便是C++語法的反對者也許也很難找到理由說“我還是不用C++”。在我看來,一個真正從實(shí)踐意義上理性反對使用C++的人只有一個理由:C++的復(fù)雜性帶來的混亂抵消乃至超過了C++的抽象機(jī)制和庫(在他的特定項(xiàng)目中)帶來的好處。
值得注意的是,這里需要避免一個陷阱,就是一旦人們認(rèn)定了“C++不好”,那么這個理由就會“長出自己的腳來”,即,就算我們拿掉C++的復(fù)雜性,他們可能也會堅(jiān)持還是不用C++語法并為之找一堆理由。
我假定你不是這樣的人。不過,也許最可能的是他會說:“問題是我們今天用的C++并非如此(簡潔),你的假設(shè)不成立。”是的,我的假設(shè)不成立。但雖然我們無法消除復(fù)雜性,我們實(shí)際上是可以容易地避開復(fù)雜性,避短揚(yáng)長的。這也是本文的要點(diǎn),容我后面再詳述。
【編輯推薦】