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

歡迎訪問 生活随笔!

生活随笔

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

生活经验

the different between Const and Static in C++

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 the different between Const and Static in C++ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.const規定了一個變量在它初始化值之后,值不能再改變,也就是只讀

來看個例子:

const測試例子

在這個測試程序里,我試圖在初始化變量c的值之后再修改c的值,編譯直接報錯,告訴我c已經是一個只讀變量了,不可以改值。

?

2.static在函數內的時候,表明這個變量在函數的生命周期結束之后也不會被釋放。

static使用測試

在第一次調用test()時,如果static int b沒有被我賦初值,也會被默認賦值成0。然后執行自增運算,所以輸出1。第二次調用test()時如果是普通的變量,則會被重新分配內存,但static類型的變量上次執行test函數之后沒有被釋放,而是保存在全局變量區,所以繼續加一變成2。

對比一下非static的變量會怎樣:

3.static在函數外的時候,表明這個變量的作用域只在該.c文件里,不能作用于整個工程。


static

  1. static局部變量 將一個變量聲明為函數的局部變量,那么這個局部變量在函數執行完成之后不會被釋放,而是繼續保留在內存中
  2. static 全局變量 表示一個變量在當前文件的全局內可訪問
  3. static 函數 表示一個函數只能在當前文件中被訪問
  4. static 類成員變量 表示這個成員為全類所共有
  5. static 類成員函數 表示這個函數為全類所共有,而且只能訪問靜態成員變量

const

  1. const 常量:定義時就初始化,以后不能更改。
  2. const 形參:func(const int a){};該形參在函數里不能改變
  3. const修飾類成員函數:該函數對成員變量只能進行只讀操作

?

在函數后加const的意義:
   我們定義的類的成員函數中,常常有一些成員函數不改變類的數據成員,也就是說,這些函數是"只讀"函數,而有一些函數要修改類數據成員的值。如果把不改變數據成員的函數都加上const關鍵字進行標識,顯然,可提高程序的可讀性。其實,它還能提高程序的可靠性,已定義成const的成員函數,一旦企圖修改數據成員的值,則編譯器按錯誤處理。?const成員函數和const對象 實際上,const成員函數還有另外一項作用,即常量對象相關。對于內置的數據類型,我們可以定義它們的常量,用戶自定義的類也一樣,可以定義它們的常量對象。

1、非靜態成員函數后面加const(加到非成員函數或靜態成員后面會產生編譯錯誤)
2、表示成員函數隱含傳入的this指針為const指針,決定了在該成員函數中, 任意修改它所在的類的成員的操作都是不允許的(因為隱含了對this指針的const引用);
3、唯一的例外是對于mutable修飾的成員。 加了const的成員函數可以被非const對象和const對象調用,但不加const的成員函數只能被非const對象調用

const成員函數主要目的是防止成員函數修改對象的內容。即const成員函數不能修改成員變量的值,但可以訪問成員變量。當方法成員函數時,該函數只能是const成員函數。

static成員函數主要目的是作為類作用域的全局函數。不能訪問類的非靜態數據成員。類的靜態成員函數沒有this指針,這導致:1、不能直接存取類的非靜態成員變量,調用非靜態成員函數2、不能被聲明為virtual


1、函數前后const
函數前const:普通函數或成員函數(非靜態成員函數)前均可加const修飾,表示函數的返回值為const,不可修改。格式為:

const returnType functionName(param list)

函數后加const:只有類的非靜態成員函數后可以加const修飾,表示該類的this指針為const類型,不能改變類的成員變量的值,即成員變量為read only(例外情況見2),任何改變成員變量的行為均為非法。此類型的函數可稱為只讀成員函數,格式為:

returnType functionName(param list) const

說明:類中const(函數后面加)與static不能同時修飾成員函數,原因有以下兩點①C++編譯器在實現const的成員函數時,為了確保該函數不能修改類的實例狀態,會在函數中添加一個隱式的參數const this*。但當一個成員為static的時候,該函數是沒有this指針的,也就是說此時const的用法和static是沖突的;
②兩者的語意是矛盾的。static的作用是表示該函數只作用在類型的靜態變量上,與類的實例沒有關系;而const的作用是確保函數不能修改類的實例的狀態,與類型的靜態變量沒有關系,因此不能同時用它們。

前面使用const?表示返回值為const
后面加const表示函數不可以修改class的成員

2、const與mutable的區別
從字面意思知道,mutalbe是“可變的,易變的”,跟constant(既C++中的const)是反義詞。在C++中,mutable也是為了突破const的限制而設置的。被mutable修飾的變量(成員變量)將永遠處于可變的狀態,即使在一個const函數中。因此,后const成員函數中可以改變類的mutable類型的成員變量。
?

#include <iostream>
using namespace std;class A{
private:int m_a;//int前加mutable關鍵字修飾即可編譯通過
public:A():m_a(0){}int setA(int a) const{this->m_a = a;//error: l-value specifies const object}int setA(int a){this->m_a = a;}
};int main()
{A a1;return 0;
}

編譯錯誤:error C2166: l-value specifies const object,左值為const,即const修飾后成員函數中的this指針為const,它所指向的成員變量不能被修改,將成員變量用mutable修飾后編譯通過。

https://blog.csdn.net/lp10031312/article/details/79512165

https://www.cnblogs.com/Jinfeng1213/p/8597446.html

https://blog.csdn.net/gorgeous_mj/article/details/90574796

總結

以上是生活随笔為你收集整理的the different between Const and Static in C++的全部內容,希望文章能夠幫你解決所遇到的問題。

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