第6章主要講述了執行期語意學,主要內容是關於數組的在構建和析構是如何進行的。
第7章主要講述了有關Template的相關內容。
這兩章內容散見於《Effective C++》、《More Effective C++》、《C++Primer》《C++Templates中 文版》等書籍,如果感興趣請閱讀對應的書籍。
本讀書筆記主要想談一下對語意的理解。
本人認為C++程序設計可以簡單分為三個層次:語法層、語言語意層(就像《深度探索C++對象模型》所講的語意)、程序語意層。
語法層是很容易理解的,也很容易學習的。講解C++語法的書籍很多,隨便找基本多學學就可以學會 。但是達到該層次只是達到了一個很低級的層次。例如我想保存五個整數,那麼我寫下int n1,n2,n3 ,n4,n5;是可以的,但是如果這麼寫,很有可能在以後的處理過程中會很麻煩;雖然上述語句完全符 合C++語法要求。
實際上如果想很好地掌握C++語法也不是很容易的,需要深入閱讀書籍和不斷的實踐。即使很好地掌握了C++大部分語法也只是剛剛走完萬裡長征的第一步。
比語法層高一級的是語言語意層。語言語意層是我自己創造的名次,那麼什麼是語言語意層呢?一個很好的解釋就是寫下的語句在符合語法之後根據該語言的具體實現也很好地符合了語意。如果說《C++ Primer》是講C++語法的好書的話,那麼《深度探索C++對象模型》就是很好的講解C++語言語意的書籍。語言語意可以簡單理解為我們寫的語句真實的語意。
例如我可以寫下
class Test
{
public:
Test(wstring) : m_strName()//A
{
m_strName = _T(“”); //B
}
private:
Wstring m_strName;
}
此時我們初始化m_strName的方法有兩種,方法A或B.雖然A和B都符合語法的要求,但是那個更符合語 意的要求呢?當然是A語句了(具體原因參見深度探索C++對象模型》一書),因此根據語意我們應該用A 語句。
本文章中所述的語言語意層就是指該內容,就是C++語言的語意。要想達到這個層次比達到上各層次 需要付出更多的努力和實踐。雖然這個層次不比上個層次難以達到,但是要想真的達到這個層次也還是 很容易的,只要努力就可以達到。
可以這樣理解程序語意學:在符合語法和語言語意層的要求之後我們現在實現了某功能,但是我們所 采用的方法是否可修改性、可理解性、時間效率、空間效率等等的要求。如果說語言語意學是從語句或 者單個類的角度理解的話,那麼程序語意學是從整個程序的高度去理解我們寫的程序是否讓人感到優美、優雅;是否能讓人感到成就、感到滿足。也就是說我們采用一個很好的方案很好地解決了這個問題。
如果想達到這個層次就需要不懈的努力和良好的悟性了。例如需要對一個大型數組進行排序那麼采用冒泡的方法一般說來沒有采用快速排序的好;再例如需要有一個可以保存某類型的數組,而該類型不確定,那麼采用保存void*指針和強制類型轉換的方法肯定不如采用類似STL中vector的方案好。以上兩個例子簡單對於了一下不同程序語意的差別。
山在遠方,路在腳下,祝我們都能達到夢想的山頂。