《深度探索C 物件模型》讀書筆記 最後一記

2021-05-23 22:01:01 字數 1567 閱讀 7510

第6章主要講述了執行期語意學,主要內容是關於陣列的在構建和析構是如何進行的。

這兩章內容散見於《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

private:

wstring m_strname;

}

此時我們初始化m_strname的方法有兩種,方法a或b.雖然a和b都符合語法的要求,但是那個更符合語意的要求呢?當然是a語句了(具體原因參見深度探索c++物件模型》一書),因此根據語意我們應該用a語句。

本文章中所述的語言語意層就是指該內容,就是c++語言的語意。要想達到這個層次比達到上各層次需要付出更多的努力和實踐。雖然這個層次不比上個層次難以達到,但是要想真的達到這個層次也還是很容易的,只要努力就可以達到。

可以這樣理解程式語意學:在符合語法和語言語意層的要求之後我們現在實現了某功能,但是我們所採用的方法是否可修改性、可理解性、時間效率、空間效率等等的要求。如果說語言語意學是從語句或者單個類的角度理解的話,那麼程式語意學是從整個程式的高度去理解我們寫的程式是否讓人感到優美、優雅;是否能讓人感到成就、感到滿足。也就是說我們採用乙個很好的方案很好地解決了這個問題。

如果想達到這個層次就需要不懈的努力和良好的悟性了。例如需要對乙個大型陣列進行排序那麼採用冒泡的方法一般說來沒有採用快速排序的好;再例如需要有乙個可以儲存某型別的陣列,而該型別不確定,那麼採用儲存void*指標和強制型別轉換的方法肯定不如採用類似stl中vector的方案好。以上兩個例子簡單對於了一下不同程式語意的差別。

山在遠方,路在腳下,祝我們都能達到夢想的山頂。

系列文章:

《深度探索c++物件模型》讀書筆記(1)

《深度探索c++物件模型》讀書筆記(2)

《深度探索c++物件模型》讀書筆記(3)

《深度探索c++物件模型》讀書筆記(4)

《深度探索c++物件模型》讀書筆記(5)

《深度探索c++物件模型》讀書筆記(6)

《深度探索c++物件模型》讀書筆記(7)

《深度探索C 物件模型》讀書筆記(5)

純虛函式 在設計抽象基類時,需要注意以下幾點 1 不要將destructor宣告為pure virtual function 如果將destructor宣告為pure virtual function,則設計者一定得定義它。因為每乙個derived class destructor會被編譯器加以擴充...

《深度探索C 物件模型》讀書筆記(6)

物件的構造和解構 一般而言,我們會把object盡可能放置在使用它的那個程式區段附近,這樣做可以節省不必要的物件產生操作和銷毀操作。全域性物件 全域性物件的靜態初始化策略包括以下幾個步驟 1 為每乙個需要靜態初始化的物件產生乙個 sti 函式,內含必要的constructor呼叫操作或inline ...

讀書筆記 《深度探索c 物件模型》 (3)

第四章 function語意學 4.2 虛擬成員函式 a 單一繼承下的virtual function 乙個class只會有乙個virtual table 這個class自己定義的virtual function,它override了乙個可能存在的base class virtual functio...