日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++函数编译原理和成员函数的实现

發布時間:2025/3/12 c/c++ 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++函数编译原理和成员函数的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++函數的編譯

C++中的函數在編譯時會根據命名空間、類、參數簽名等信息進行重新命名,形成新的函數名。這個重命名的過程是通過一個特殊的算法來實現的,稱為 名字編碼(Name Mangling)。

Name Mangling 是一種可逆的算法,既可以通過現有函數名計算出新函數名,也可以通過新函數名逆向推演出原有函數名。

Name Mangling 可以確保新函數名的唯一性,只要命名空間、所屬的類、參數簽名等有一個不同,那么產生的新函數名也不同。

小括號中就是 Name Mangling 產生的新函數名,它們都以”?“開始,以區別C語言中的”_“。

不同的編譯器有不同的 Name Mangling 算法,產生的函數名也不一樣。

除了函數,某些變量也會經 Name Mangling 算法產生新名字。

成員函數的實現

對象的內存模型中只保留了成員變量,除此之外沒有任何其他信息,程序運行時不知道 obj 的類型為 Demo,也不知道它還有一個成員函數 display()。那么,究竟是如何通過對象調用成員函數的呢?

成員函數最終被編譯成與對象無關的普通函數,如果函數體中沒有成員變量,那問題就很簡單,不用對函數做任何處理,直接調用即可。

如果成員函數中使用到了成員變量,該怎么辦呢?成員變量的作用域不是全局,不經任何處理就無法在函數內部訪問。

C++規定,編譯成員函數時要額外添加一個參數,把當前對象的指針傳遞進去,通過指針來訪問成員變量。

這樣就完成了對象和成員函數的關聯,只不過與我們從表明上看到的相反,不是通過對象找函數,而是通過函數找對象。

這一切都是隱式完成的,對程序員來說完全透明,就好像這個額外的參數不存在一樣。

總結

以上是生活随笔為你收集整理的C++函数编译原理和成员函数的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。