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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

private修饰的变量如何调用_梳理c++ const 修饰函数

發布時間:2025/4/16 c/c++ 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 private修饰的变量如何调用_梳理c++ const 修饰函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

const是衡量一個程序員是否老道的一個標準,除了修飾變量之外,還可以修飾函數,主要有以下幾種形式

const int& fun(int& a); //修飾返回值 int& fun(const int& a); //修飾形參 int& fun(int& a) const{} //const成員函數

const返回值

這種多是修飾返回值是引用類型的情況下,為了避免返回值被修改的情況。

解釋下:返回值是引用的函數, 可以肯定的是這個引用必然不是臨時對象的引用, 因此一定是成員變量或者是函數參數, 所以在返回的時候為了避免其成為左值被修改,就需要加上const關鍵字來修飾。

舉個例子:

#include<iostream>using namespace std;class A { private:int data; public:A(int num):data(num){}~A(){};int& get_data(){return data;} };int main() {A a(1);a.get_data()=3;cout<<a.get_data()<<endl; //data=3return 0; }

那么這個時候為了避免成員函數被修改就需要加上const關鍵字,這個時候如果試圖改變返回值是不允許的:

error: cannot assign to return value because function 'get_data' returns a const value

需要指出的是,如果函數的返回類型是內置類型,比如 int char 等,修改返回值本身就是不合法的!所以 const 返回值是處理返回類型為用戶定義類型的情況。

const 修飾實參

多數情況下,我們都會選擇 pass by reference,這樣可以節省內存,并且可以起到改變實參的目的。不過有的時候我們并不希望改變實參的值,就要加上const關鍵字。

這個不仔細說了,很容易理解。不過在構造接口之前一定要思考函數是否會修改參數,如果不會修改的話一定要加上const,這個是代碼寫的是否大氣的一個標準(侯捷大師原話。。)。

const成員函數

這種情況多數情形下很容易被忽視,其實這個是非常重要的一個內容。

設想這樣一種場景:

const String str("hello world"); str.print();

假設在string類中有一個成員函數叫做print, 如果這個函數在定義的時候沒有加上const 關鍵字,上述的代碼是無法通過編譯的,下面舉個具體的例子:

#include<iostream>using namespace std;class A { private:int data; public:A(int num):data(num){}~A(){};int& get_data(){return data;} };int main() {const A a(1);a.get_data();return 0; }

毫不意外的出錯了:

error: 'this' argument to member function 'get_data' has type 'const A', but function is not marked const。

我們敏銳的發現了一個“this"指針,這個從何說起?

其實任何成員函數的參數都是含有this 指針的,好比py中的 self ,只不過c++中規定全部不寫這個參數, 其實這個參數就是對象本身, 即誰調用成員函數, 這個 this 就是誰!

我們的例子中 a 是一個const 對象, 它調用了 get_data 方法,所以函數簽名應該是:

get_data(a){}

而 a是一個 const 對象, 我們默認的 this 指針并不是 const 類型,所以參數類型不匹配, 編譯無法通過!

這下我們終于清楚了, const 修飾成員函數, 根本上是修飾了 this 指針。

下面摘取侯捷PPT中的一張圖片, 介紹了string源碼中的一些片段:

這兩個成員函數都重載了[]符號,而前者是const ,不必擔心修改參數, 而后者由于引用計數的問題, 多個變量指向一個內存, 一旦修改就必須copy后修改,cow。

需要指出的是, 這倆函數確實是不同的函數, 加了這個const 之后函數簽名是不一樣的。

有如下的規則:

補充一點,如果成員函數同時具有 const 和 non-const 兩個版本的話, const 對象只能調用const成員函數, non-const 對象只能調用 non-const 成員函數。

總結

以上是生活随笔為你收集整理的private修饰的变量如何调用_梳理c++ const 修饰函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人黄色视屏 | 亚洲精品视频一区二区三区 | 男女偷爱性视频刺激 | youjizz在线视频| 亚洲av熟女高潮一区二区 | 国产剧情av引诱维修工 | 国产乱国产乱老熟300部视频 | 日韩一区二区免费播放 | 国产精品12页| 亚洲深夜视频 | 美女福利视频在线观看 | 国产精品久久久久久免费 | 久草资源| 不卡av免费 | 99re在线播放| 国毛片| 成人毛片在线 | 欧美日韩免费一区 | 91精品综合久久久久久 | 懂色av一区二区在线播放 | 亚洲国产精品久久人人爱 | 神秘马戏团在线观看免费高清中文 | 亚洲激情视频小说 | www四虎com | 久久看视频 | 日韩欧美国产精品 | 天堂素人约啪 | av在线一| 激情综合五月天 | 免费成人电影在线观看 | 97人人插| 福利所第一导航 | 大肉大捧一进一出视频 | av黄| 久久3p| 国产自精品 | 豆花av在线 | 99精品欧美 | 国产麻豆一区 | 麻豆视频成人 | 亚洲在线一区二区 | 国产不卡在线视频 | 91精品福利视频 | 一级性生活大片 | 日韩在线视频在线观看 | 欧美人与性动交ccoo | 四虎精品成人免费网站 | 鲁一鲁在线视频 | 亚洲免费在线视频 | 色哟哟导航 | 亚洲一区二区三区午夜 | 亚洲欧美一区二区三区在线观看 | 国产欧美一区二区三区精品酒店 | 成人av电影在线播放 | 91福利在线导航 | 精品国产91乱码一区二区三区 | 欧洲最强rapper网站直播 | 日本美女交配 | 亚洲色成人www永久在线观看 | 日本丰满少妇裸体自慰 | 好了av在线 | 性做久久久久久免费观看欧美 | 国产精品无码免费播放 | 久久久久久久中文字幕 | 五月天狠狠干 | 亚洲欧美色图在线 | 日韩字幕在线观看 | 国产情侣露脸自拍 | 韩国av电影网站 | 日本国产一区二区 | 亚洲综合天堂 | 99自拍| 国产亚洲精品久久777777 | 国产三级精品三级在线观看 | 午夜黄色av | 在线免费日韩 | 中文字av | 在线观看二区 | 欧美日韩精品久久久免费观看 | 中文字幕黄色av | 国产精品日本一区二区在线播放 | 黄色小毛片 | 一级毛片aa| 国产视频999 | 女人扒开腿让男人桶爽 | 日韩精品久久久久久久的张开腿让 | 国产精品第二十页 | 久久丫精品久久丫 | 成年人看的视频网站 | 五月天综合社区 | 污片在线观看 | 波多野结衣视频免费观看 | 精彩视频一区二区 | 91插插插影库永久免费 | 亚洲天堂小说 | 鲁丝一区二区 | 日韩福利片在线观看 | 男人透女人免费视频 | 日本一区二区三区四区视频 |