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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ const关键字总结

發布時間:2023/12/20 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ const关键字总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。

1. 修飾常量

用const修飾的變量是不可變的,以下兩種定義形式在本質上是一樣的:

const int a = 10; int const a = 10;

2. 修飾指針

如果const位于*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
如果const位于*的右側,const就是修飾指針本身,即指針本身是常量。
因此,推薦使用int const* p,而不是使用const int* p(雖然兩者意義完全一樣),這樣更容易理解。

int a = 10; const int* p = &a; // 指針指向的內容不能變 int const* p = &a; // 同上 int* const p = &a; // 指針本身不能變 const int* const p = &a; // 兩者都不能變 int const* const p = &a; // 同上

3. 修飾引用

以下兩種定義形式在本質上是一樣的:

int a = 10; const int& b = a; int const& b = a;

4. 修飾函數參數

用const修飾函數參數,傳遞過來的參數在函數內不可以改變。

void func (const int& n) {n = 10; // 編譯錯誤 }

5.?修飾函數返回值

用const修飾函數返回值的含義和用const修飾普通變量以及指針的含義基本相同。

const int* func() // 返回的指針所指向的內容不能修改 {// return p; }

6. 修飾類成員變量

用const修飾的類成員變量,只能在類的構造函數初始化列表中賦值,不能在類構造函數體內賦值。

class A { public:A(int x) : a(x) // 正確 {//a = x; // 錯誤 }
privateconst int a; };

7. 修飾類成員函數

用const修飾的類成員函數,在該函數體內不能改變該類對象的任何成員變量, 也不能調用類中任何非const成員函數。

class A { public:int& getValue() const{// a = 10; // 錯誤return a;}private:int a; // 非const成員變量 };

8. 修飾類對象

用const修飾的類對象,該對象內的任何成員變量都不能被修改。
因此不能調用該對象的任何非const成員函數,因為對非const成員函數的調用會有修改成員變量的企圖。

class A {public:void funcA() {}void funcB() const {} };int main {const A a;a.funcB(); // 可以a.funcA(); // 錯誤const A* b = new A();b->funcB(); // 可以b->funcA(); // 錯誤 }

9. 在類內重載成員函數

class A { public:void func() {}void func() const {} // 重載 };

10. const與宏定義的區別

const常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查,而對后者只進行字符替換,沒有類型安全檢查,并且在字符替換時可能會產生意料不到的錯誤。
const常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干個拷貝。
另外,編譯器通常不為const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。

#define PI 3.1415926535 const double PI = 3.1415926535;

11. const_cast

const_cast運算符用來修改類型的const或volatile屬性。
一、常量指針被轉化成非常量的指針,并且仍然指向原來的對象;
二、常量引用被轉換成非常量的引用,并且仍然指向原來的對象。

void func() {const int a = 10;int* p = const_cast<int*> (&a);*p = 20;std::cout<<*p; // 20std::cout<<a; // 10, 原因見第10部分 }

轉載于:https://www.cnblogs.com/chogen/p/4574118.html

總結

以上是生活随笔為你收集整理的C++ const关键字总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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