国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-09-23 11:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

const

作用

修飾變量,說明該變量不可以被改變;

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

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

修飾成員函數,說明該成員函數內不能修改成員變量。

const 的指針與引用

指針

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

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

引用

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

沒有 const reference,因為引用只是對象的別名,引用不是對象,不能用 const 修飾

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

const 使用

// 類class A{private: const int a; // 常對象成員,可以使用初始化列表或者類內初始化 public: // 構造函數 A() : a(0) { }; A(int x) : a(x) { }; // 初始化列表 // const可用于對重載函數的區分

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

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

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

} // 函數void function1(const int Var); // 傳遞過來的參數在函數內不可變void function2(const char* Var); // 參數指針所指內容為常量void function3(char* const Var); // 參數指針為常量void function4(const int& Var); // 引用參數在函數內為常量 // 函數返回值

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

static

作用

修飾普通變量,修改變量的存儲區域和生命周期,使變量存儲在靜態區,在 main 函數運行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統用默認值初始化它。

修飾普通函數,表明函數的作用范圍,僅在定義該函數的文件內才能使用。在多人開發項目時,為了防止與他人命名空間里的函數重名,可以將函數定位為 static。

修飾成員變量,修飾成員變量使所有的對象只保存一個該變量,而且不需要生成對象就可以訪問該成員。

修飾成員函數,修飾成員函數使得不需要生成對象就可以訪問該函數,但是在 static 函數內不能訪問非靜態成員。

this 指針

this 指針是一個隱含于每一個非靜態成員函數中的特殊指針。它指向調用該成員函數的那個對象。

當對一個對象調用成員函數時,編譯程序先將對象的地址賦給 this 指針,然后調用成員函數,每次成員函數存取數據成員時,都隱式使用 this 指針。

當一個成員函數被調用時,自動向它傳遞一個隱含的參數,該參數是一個指向這個成員函數所在的對象的指針。

this 指針被隱含地聲明為: ClassName *const this,這意味著不能給 this 指針賦值;在 ClassName 類的 const 成員函數中,this 指針的類型為:const ClassName* const,這說明不能對 this 指針所指向的這種對象是不可修改的(即不能對這種對象的數據成員進行賦值操作);

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

在以下場景中,經常需要顯式引用 this 指針:

為實現對象的鏈式引用;

為避免對同一對象進行賦值操作;

在實現一些數據結構時,如 list。

寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145565
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97178
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67499

原文標題:C++基礎語法梳理:const,static以及 this 指針

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    keil實現cc++混合編程

    起因項目中使用到一個開源的模擬IIC的庫,封裝的比較好,但是是使用c++寫的。于是將其移植到自己的項目中,主要有以下三步操作: 在工程選項 C/C++中去掉勾選
    發表于 01-26 08:58

    C語言重點—指針

    C語言是比較偏底層的語言,為什么他比較偏底層,就是因為他的很多操作都是直接針對內存操作的。 這篇我們就來講解C語言的一大特點,也是難點,指針指針操作。 這篇文章我會先從基本類型的存儲
    發表于 01-22 08:23

    C語言嵌入式系統編程注意事項-內存操作

    C語言嵌入式系統編程注意事項之內存操作 在嵌入式系統的編程,常常要求在特定的內存單元讀寫內容,匯編有對應的MOV指令,而除C/C++以外的其它編程語言基本沒有直接訪問絕對地址的能力
    發表于 01-04 07:31

    C語言與C++的區別及聯系

    缺點:性能比面向過程低。 二、具體語言上的區別 1、關鍵字的不同 C語言有32個關鍵字;C++有63個關鍵字。 2、后綴名不同 C源文件后綴.c
    發表于 12-24 07:23

    CC++之間的聯系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++編譯器下編譯通過。 2、底層控制: C++
    發表于 12-11 06:51

    C語言和C++之間的區別是什么

    區別 1、面向對象編程 (OOP): C語言是一種面向過程的語言,它強調的是通過函數將任務分解為一系列步驟進行執行。 C++C語言的基礎上擴展了面向對象的特性,支持類(class)、封裝、繼承
    發表于 12-11 06:23

    C/C++條件編譯

    條件編譯是一種在編譯時根據條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ ,條件編譯使用預處理指令 #ifdef、#endif、#else 和 #elif 來實現。常用的條件編譯指令有
    發表于 12-05 06:21

    C++程序異常的處理機制

    1、什么是異常處理? 有經驗的朋友應該知道,在正常的CC++編程過程難免會碰到程序不按照原本設計運行的情況。 最常見的有除法分母為零,數組越界,內存分配失效、打開相應文件失敗等等。 一個程序
    發表于 12-02 07:12

    C/C++代碼靜態測試工具Perforce QAC 2025.3的新特性

    對?Perforce Validate??QAC?項目的相對/根路徑的支持。C++?分析也得到了增強,增加了用于檢測 C++?并發問題的新檢查,并改進了實體名稱和實
    的頭像 發表于 10-13 18:11 ?568次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態測試工具Perforce QAC 2025.3的新特性

    技能+1!如何在樹莓派上使用C++控制GPIO?

    和PiGPIO等庫,C++可用于編程控制樹莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對速度和精度要求較高的硬件項目。在樹莓派社區,關于“Python
    的頭像 發表于 08-06 15:33 ?4150次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    在OpenVINO? C++代碼啟用 AddressSanitizer 時的內存泄漏怎么解決?

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

    主流的 MCU 開發語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉。先說內存這道坎兒。您當stm32f4的256kRAM
    的頭像 發表于 05-21 10:33 ?1037次閱讀
    主流的 MCU 開發語言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

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

    C 語言關鍵字 const 舉足輕重,我們今天就深度聊一聊 const 的定義和實際應用,讓它 不再是迷C 語言中
    發表于 04-01 14:18 ?3次下載

    C++學到什么程度可以找工作?

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

    創建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼獲得的結果與Python代碼不同是為什么?

    創建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個推理過程中使用相同的圖像和模型。 從 C++ 代碼獲得的結果與 Python* 代碼不同。
    發表于 03-06 06:22