Const 重载解析
1. Const重載應用場景
首先,對于函數值傳遞的情況,因為參數傳遞是通過復制實參創建一個臨時變量傳遞進函數的,函數內只能改變臨時變量,但無法改變實參。則這個時候無論加不加const對實參不會產生任何影響。但是在引用或指針傳遞函數調用中,因為傳進去的是一個引用或指針,這樣函數內部可以改變引用或指針所指向的變量,這時const 才是實實在在地保護了實參所指向的變量。因為在編譯階段編譯器對調用函數的選擇是根據實參進行的,所以,只有引用傳遞和指針傳遞可以用是否加const來重載。
例如:
1 int main() 2 { 3 const int b =5; 4 int c = 3; 5 A a; 6 a.foo(&b); 7 a.foo(&c); 8 return 1; 9 } 10 11 int main() 12 { 13 const int b =5; 14 int c = 3; 15 A a; 16 a.foo(&b); 17 a.foo(&c); 18 return 1; 19 }
?
2. Const成員函數的重載
const 成員函數重載的解析和const參數重載解析的原理可以說是一樣的。之所以這樣說是因為const成員函數的解析可被看做是對函數this參數用const來修飾的過程
例如:
class A{
public: A(); int foo(int *test); //可看做:int foo(A *this,int *test); int foo(int *test) const;//可看做:int foo(const A *this,int *test);
}; int main()
{ int b = 5; const A a; a.foo(&b); return 1;
}
3. 總結
(1) const重載主要是通過能否對傳入的參數進行修改為判斷的。
(2) const參數重載和const函數重載機制都是一樣的,因為對于const 函數重載可看做是對隱含的指針this的參數重載。對于非成員函數,因為沒有this指針,不能根據const重載。
(3) 重載是在編譯階段已經完成,對于匯編和鏈接來說透明的。
(4) 構造函數可以重載,但是不可以聲明成const函數(需要初始化成員變量); 析構函數不傳入參數也不返回值,因此不能重載。
轉載于:https://www.cnblogs.com/DF11G/p/4031238.html
總結
以上是生活随笔為你收集整理的Const 重载解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 祥字开头成语有哪些?
- 下一篇: 大学生活该如何规划?