99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中const以及this指針的使用

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2021-09-23 11:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

const

作用

修飾變量,說(shuō)明該變量不可以被改變;

修飾指針,分為指向常量的指針(pointer to const)和自身是常量的指針(常量指針,const pointer);

修飾引用,指向常量的引用(reference to const),用于形參類型,即避免了拷貝,又避免了函數(shù)對(duì)值的修改;

修飾成員函數(shù),說(shuō)明該成員函數(shù)內(nèi)不能修改成員變量。

const 的指針與引用

指針

指向常量的指針(pointer to const)

自身是常量的指針(常量指針,const pointer)

引用

指向常量的引用(reference to const)

沒(méi)有 const reference,因?yàn)橐弥皇菍?duì)象的別名,引用不是對(duì)象,不能用 const 修飾

(為了方便記憶可以想成)被 const 修飾(在 const 后面)的值不可改變,如下文使用例子中的 p2、p3

const 使用

// 類class A{private: const int a; // 常對(duì)象成員,可以使用初始化列表或者類內(nèi)初始化 public: // 構(gòu)造函數(shù) A() : a(0) { }; A(int x) : a(x) { }; // 初始化列表 // const可用于對(duì)重載函數(shù)的區(qū)分

int getValue(); // 普通成員函數(shù) int getValue() const; // 常成員函數(shù),不得修改類中的任何數(shù)據(jù)成員的值

}; void function(){ // 對(duì)象 A b; // 普通對(duì)象,可以調(diào)用全部成員函數(shù) const A a; // 常對(duì)象,只能調(diào)用常成員函數(shù) const A *p = &a; // 指針變量,指向常對(duì)象 const A &q = a; // 指向常對(duì)象的引用 // 指針 char greeting[] = “Hello”; char* p1 = greeting; // 指針變量,指向字符數(shù)組變量

const char* p2 = greeting; // 指針變量,指向字符數(shù)組常量(const 后面是 char,說(shuō)明指向的字符(char)不可改變) char* const p3 = greeting; // 自身是常量的指針,指向字符數(shù)組變量(const 后面是 p3,說(shuō)明 p3 指針自身不可改變) const char* const p4 = greeting; // 自身是常量的指針,指向字符數(shù)組常量

} // 函數(shù)void function1(const int Var); // 傳遞過(guò)來(lái)的參數(shù)在函數(shù)內(nèi)不可變void function2(const char* Var); // 參數(shù)指針?biāo)竷?nèi)容為常量void function3(char* const Var); // 參數(shù)指針為常量void function4(const int& Var); // 引用參數(shù)在函數(shù)內(nèi)為常量 // 函數(shù)返回值

const int function5(); // 返回一個(gè)常數(shù)const int* function6(); // 返回一個(gè)指向常量的指針變量,使用:const int *p = function6();int* const function7(); // 返回一個(gè)指向變量的常指針,使用:int* const p = function7();

static

作用

修飾普通變量,修改變量的存儲(chǔ)區(qū)域和生命周期,使變量存儲(chǔ)在靜態(tài)區(qū),在 main 函數(shù)運(yùn)行前就分配了空間,如果有初始值就用初始值初始化它,如果沒(méi)有初始值系統(tǒng)用默認(rèn)值初始化它。

修飾普通函數(shù),表明函數(shù)的作用范圍,僅在定義該函數(shù)的文件內(nèi)才能使用。在多人開(kāi)發(fā)項(xiàng)目時(shí),為了防止與他人命名空間里的函數(shù)重名,可以將函數(shù)定位為 static。

修飾成員變量,修飾成員變量使所有的對(duì)象只保存一個(gè)該變量,而且不需要生成對(duì)象就可以訪問(wèn)該成員。

修飾成員函數(shù),修飾成員函數(shù)使得不需要生成對(duì)象就可以訪問(wèn)該函數(shù),但是在 static 函數(shù)內(nèi)不能訪問(wèn)非靜態(tài)成員。

this 指針

this 指針是一個(gè)隱含于每一個(gè)非靜態(tài)成員函數(shù)中的特殊指針。它指向調(diào)用該成員函數(shù)的那個(gè)對(duì)象。

當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程序先將對(duì)象的地址賦給 this 指針,然后調(diào)用成員函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員時(shí),都隱式使用 this 指針。

當(dāng)一個(gè)成員函數(shù)被調(diào)用時(shí),自動(dòng)向它傳遞一個(gè)隱含的參數(shù),該參數(shù)是一個(gè)指向這個(gè)成員函數(shù)所在的對(duì)象的指針。

this 指針被隱含地聲明為: ClassName *const this,這意味著不能給 this 指針賦值;在 ClassName 類的 const 成員函數(shù)中,this 指針的類型為:const ClassName* const,這說(shuō)明不能對(duì) this 指針?biāo)赶虻倪@種對(duì)象是不可修改的(即不能對(duì)這種對(duì)象的數(shù)據(jù)成員進(jìn)行賦值操作);

this 并不是一個(gè)常規(guī)變量,而是個(gè)右值,所以不能取得 this 的地址(不能 &this)。

在以下場(chǎng)景中,經(jīng)常需要顯式引用 this 指針:

為實(shí)現(xiàn)對(duì)象的鏈?zhǔn)揭茫?/p>

為避免對(duì)同一對(duì)象進(jìn)行賦值操作;

在實(shí)現(xiàn)一些數(shù)據(jù)結(jié)構(gòu)時(shí),如 list。

寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141809
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95271
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64911

原文標(biāo)題:C++基礎(chǔ)語(yǔ)法梳理:const,static以及 this 指針

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    在OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    帶你在單片機(jī)編程熟練使用const(可下載)

    C 語(yǔ)言關(guān)鍵字 const 舉足輕重,我們今天就深度聊一聊 const 的定義和實(shí)際應(yīng)用,讓它 不再是迷C 語(yǔ)言中
    發(fā)表于 04-01 14:18 ?2次下載

    C++學(xué)到什么程度可以找工作?

    C++學(xué)到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開(kāi)發(fā)人員或相關(guān)職位,通常需要掌握以下幾個(gè)方面: 1. **語(yǔ)言基礎(chǔ)**:你需要對(duì)C++的核心概念有扎實(shí)的理解,包括但不限于指針
    發(fā)表于 03-13 10:19

    Spire.XLS for C++組件說(shuō)明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?632次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說(shuō)明

    EE-112:模擬C++的類實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++的類實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類實(shí)現(xiàn)

    C語(yǔ)言程序設(shè)計(jì)教程第4版第8講:指針

    C語(yǔ)言指針講解
    發(fā)表于 11-20 14:10 ?6次下載

    C語(yǔ)言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語(yǔ)言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?650次閱讀
    <b class='flag-5'>C</b>語(yǔ)言<b class='flag-5'>指針</b>學(xué)習(xí)筆記

    C語(yǔ)言和C++結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語(yǔ)言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?774次閱讀

    C語(yǔ)言指針運(yùn)算符詳解

    C語(yǔ)言中,當(dāng)你有一個(gè)指向數(shù)組某個(gè)元素的指針時(shí),你可以對(duì)該指針執(zhí)行某些算術(shù)運(yùn)算,例如加法或減法。這些運(yùn)算可以用來(lái)遍歷數(shù)組的元素,如ptr
    的頭像 發(fā)表于 10-30 11:16 ?797次閱讀

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    使用OpenVINO GenAI API在C++構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開(kāi)發(fā)的,而將生成式AI(GenAI)功能集成到這些應(yīng)用程序可能會(huì)很具有挑戰(zhàn)性,尤其是因?yàn)槭褂孟?Hugging Face 這樣的 Python 庫(kù)的復(fù)雜性。C++
    的頭像 發(fā)表于 10-12 09:36 ?1134次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C++</b><b class='flag-5'>中</b>構(gòu)建AI應(yīng)用程序

    ostream在c++的用法

    ostream 是 C++ 標(biāo)準(zhǔn)庫(kù)中一個(gè)非常重要的類,它位于 頭文件(實(shí)際上,更常見(jiàn)的是通過(guò)包含 頭文件來(lái)間接包含 ,因?yàn)?包含了 和 )。 ostream 類及其派生類(如 std::cout
    的頭像 發(fā)表于 09-20 15:11 ?1948次閱讀

    C語(yǔ)言指針詳細(xì)解析

    可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體在這一段空間起始位置的相對(duì)距離值。在C/C++語(yǔ)言中,指針一般被認(rèn)為是
    發(fā)表于 09-14 10:03

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺(jué)得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開(kāi)發(fā)的使用習(xí)慣與推理方式。與OpenCV的Mat對(duì)象對(duì)接方式更是幾乎無(wú)縫對(duì)接,非常的方便好用。
    的頭像 發(fā)表于 07-26 09:20 ?1582次閱讀

    ModusToolbox 3.2在c代碼包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個(gè)用純 C 語(yǔ)言編寫的 XMC4700 項(xiàng)目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼。 我可以構(gòu)建獨(dú)立的 .cpp/.hpp
    發(fā)表于 07-23 08:21