總的一條就是讓client只依賴「名字」,而不依賴任何"實現"。
「實現」 具體的就是2類
1)函式體,code
2)任何記憶體塊大小,layout細節
為什麼會有二進位制相容問題,就是因為一般的c++標頭檔案並不是單純的介面宣告,其中也還包括了「實現細節」,因為成員變數就是一種記憶體layout,就屬於實現細節。對於函式,也有2種情況使得client依賴了實現:
1)inline function: 直接讓client依賴了code
2)virtual 函式:隱含的vtable 實際也是讓client 依賴了某種記憶體layout
著名的pimpl模式就是針對c++這種情況量身定製的二進位制相容方案
1)只定義非inline,非virtual的 public函式
2)成員變數只有乙個 impl*, 雖然client也依賴了這一實現細節,但它的記憶體塊layout和大小都不會變。
c 二進位制 負數 二進位制概念
我們平時認識的數字比如1 2 3 4等數字叫做十進位制數字,我們可以看懂,但是計算機無法運算,如果計算機要計算這些數字就得將這些數字轉換成計算機能讀懂的資料,計算只能讀懂二進位制數字,二進位制的數字有什麼特徵呢?二進位制就是由1和0組成的數字,那麼為什麼計算機要使用二進位制資料呢?下面作為了解。a ...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
二進位制相容問題
二進位制相容問題,主要是針對動態鏈結庫而言的。在windows上就是dll,在linux上就是so。如果主程式exe 當然也可以是客戶庫 不變,公升級了依賴庫so1到so2,而不需要重新編譯,那麼就是說so2是相容so1庫的。二進位制相容涉及到編譯問題,所以和硬體平台,軟體平台以及編譯器等都是密切相...