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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Const 重载解析

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 重载解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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