C/C++編程筆記:函數(shù)重載和const關鍵字

看看以下C ++程序的輸出:
輸出:上面的程序編譯并運行良好,并產(chǎn)生以下輸出。
fun() called
fun() const called
兩種方法'void fun()const'和'void fun()'具有相同的簽名,除了一個是const而另一個不是。另外,如果我們仔細看一下輸出,會發(fā)現(xiàn)在const對象上調(diào)用了“ const void fun()”,而在非const對象上調(diào)用了“ void fun()”。
C ++允許根據(jù)const類型重載成員方法。當函數(shù)返回引用或指針時,基于const類型的重載可能會很有用。我們可以使一個函數(shù)const返回一個const引用或const指針,另一個非const函數(shù)返回一個非const引用或指針。
參數(shù)呢?
與const參數(shù)有關的規(guī)則很有趣。讓我們首先看下面的兩個例子。程序1編譯失敗,但是程序2編譯并運行正常。
輸出:
編譯器錯誤:重新定義“ void fun(int)”
輸出:
const fun()ssss
只有當const參數(shù)是引用或指針時,C ++才允許基于參數(shù)的常數(shù)重載函數(shù)。這就是程序1編譯失敗,但程序2正常運行的原因。這條規(guī)則實際上是有道理的。在程序1中,參數(shù)“ i”按值傳遞,因此fun()中的“ i”是main()中“ i”的副本。因此fun()無法修改main()的“ i”。因此,接收“ i”作為常量參數(shù)還是普通參數(shù)都沒有關系。當我們通過引用或指針傳遞時,我們可以修改引用或指向的值,因此我們可以有兩個版本的函數(shù),一個可以修改引用或指向的值,另一個不能。
作為練習,預測以下程序的輸出:
以上就是今天的全部內(nèi)容了。每日分享小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學習基地
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
