C++ 重载机制实现原理
生活随笔
收集整理的這篇文章主要介紹了
C++ 重载机制实现原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2018-03-17 創建人:Ruo_Xiao
開發環境:VS2010
郵箱:xclsoftware@163.com
解決為了實現同一個功能而命名不同的函數名字的問題; 實現類中可以有不同功能構造函數的問題; 實現操作符重載。
一、什么是函數重載
在同一作用域類,一組函數的函數名相同,參數列表不同(參數個數不同/參數類型不同),返回值可同可不同。
二、作用
三、實現原理
編譯器對函數進行重命名。
四、C的函數命名規則
1、函數命名規則為:“_” + 函數名
2、栗子:
cod文件的結果部分如下:
上述中,“_Add”為編譯器對函數“Add”的重新命名,故編譯器無法區分相同函數名不同形參的情況下的函數,故不支持函數重載。
五、C++的全局函數命名規則
1、命名規則為:“?” + 函數名 + “@@YA” + 形參 + “@Z”。
2、栗子:
cod文件的結果部分如下:
?Add@@YAMMM@Z ?Add@@YAHHH@Z六、C++的類函數命名規則
1、命名規則:“?” + 函數名 + “@” + 類名 + “@@QAE” + 形參 + “@Z”。
2、栗子:
cod文件的結果部分如下:
?Add@MyMath@@QAEHHH@Z ?Add@MyMath@@QAENNN@Z七、拓展
1、為什么函數命名規則中只針對了形參類型和個數,對返回值卻沒有要求呢?
答:因為只有這樣才能將函數的命名規則脫離代碼的上下文。
栗子:
上述代碼報錯:Add 重命名。
若函數命名包含返回值,則上述代碼中兩個“Add”函數需要根據表達式中的變量類型來判斷調用哪個函數。故,函數命名規則中不能包含函數的返回值。
2、重寫
重寫是派生類中虛函數覆蓋基類中對應的虛函數的過程。
總結
以上是生活随笔為你收集整理的C++ 重载机制实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cc、gcc、g++ 的区别和联系
- 下一篇: s3c2440移植MQTT