一、const關鍵字
const是C++語言中的一個關鍵字,它用來修飾一個變量,表示該變量的值不能被修改。const的作用是讓變量只讀,即不能再對該變量進行賦值,從而保證程序的安全性。
例如,下面的代碼定義了一個const變量,並對該變量進行初始化,同時在試圖修改該變量的值時,會出現編譯錯誤:
const int MAX_VALUE = 100;
MAX_VALUE = 200; //error: assignment of read-only variable 'MAX_VALUE'
const關鍵字還可以用於函數的參數和返回值。用const修飾的參數表示該參數在函數內部不能被修改;用const修飾的返回值表示該返回值是只讀的。
二、static關鍵字
static也是C++語言中的一個關鍵字,它可以修飾變量、函數和類。當它修飾一個變量時,該變量被稱為靜態變量,它的作用域在所在的文件中;當它修飾一個函數時,該函數被稱為靜態函數,它只能在當前文件中使用;當它修飾一個類的成員變量時,該成員變量被所有對象所共享。
2.1 靜態變量
靜態變量的生命周期從程序開始運行到結束,不同於一般的變量,其作用域僅限於當前文件。
#include <iostream>
using namespace std;
void foo()
{
static int a = 0;
a++;
cout << a << endl;
}
int main()
{
foo(); //1
foo(); //2
foo(); //3
return 0;
}
上面的代碼演示了靜態變量的使用方式,我們可以看到在執行foo函數時,a的值會累加,同時a的生命周期在程序退出時才會結束。
2.2 靜態函數
靜態函數與非靜態函數不同,它只能在當前文件中使用。靜態函數一般用於需要在當前文件中使用而不需要被其他文件調用的情況。
#include <iostream>
using namespace std;
static void foo()
{
cout << "This is a static function." << endl;
}
int main()
{
foo(); //This is a static function.
return 0;
}
上面的代碼演示了靜態函數的使用方式,我們可以看到在程序中直接調用foo函數即可,而不需要擔心其他文件調用該函數。
2.3 靜態成員變量
靜態成員變量是指所有對象共享的變量。它與一般的成員變量不同,在編譯時已經分配好了內存空間。靜態成員變量必須在類的外部進行初始化。
#include <iostream>
using namespace std;
class Student
{
public:
Student(int id, string name)
{
m_id = id;
m_name = name;
s_count++;
}
void showCount()
{
cout << "Count:" << s_count << endl;
}
private:
int m_id;
string m_name;
static int s_count;
};
int Student::s_count = 0;
int main()
{
Student s1(1, "Tom");
s1.showCount(); //Count:1
Student s2(2, "Jerry");
s2.showCount(); //Count:2
return 0;
}
上面的代碼演示了靜態成員變量的使用方式,我們可以看到當每次新建一個Student對象時,靜態成員變量s_count的值會累加。
三、const static的聯合使用
const static通常用來定義常量。它是將const和static兩個關鍵字一起使用。
一個應用場景是在類中定義常量,可以使用const static關鍵字:
#include <iostream>
using namespace std;
class Math
{
public:
static const double PI; //定義常量PI
};
const double Math::PI = 3.1415926535; //在類外進行初始化
int main()
{
cout << "PI:" << Math::PI << endl;
return 0;
}
上面的代碼演示了在類中定義常量的使用方式。在定義時將常量設置為static const類型,然後在類外進行初始化,即可在程序中使用。
四、const static與內部連接
內部連接是指作用域限定在單個文件中的變量。const static修飾的變量默認情況下就是具有內部連接的。這意味着在不同的文件中定義同名的const static變量時,它們不會衝突,相當於定義了不同的變量。
//File1.cpp
#include <iostream>
using namespace std;
const static int NUM = 100;
void showNum()
{
cout << "NUM:" << NUM << endl;
}
//File2.cpp
#include <iostream>
using namespace std;
const static int NUM = 200;
void showNum();
int main()
{
showNum();
return 0;
}
上面代碼演示了不同文件中定義同名const static變量的使用方式。我們可以看到在兩個文件中定義了NUM變量,它們的值分別是100和200,在不同的文件中調用showNum函數,輸出的結果也是不同的。
五、const static的應用場景
const static的應用場景非常廣泛,主要用於以下幾個方面:
5.1 定義常量
可以使用const static關鍵字定義常量。這種方式定義的常量可以被整個程序所使用,而且程序中所有使用該常量的地方都能夠保證該常量的值不變。
5.2 累加器
可以使用靜態變量來實現累加器的功能。因為靜態變量的值不會被函數調用所改變,所以它可以保留上一次的值,然後加一。
5.3 共享數據
可以使用靜態成員變量來實現共享數據的功能。靜態成員變量被所有對象所共享,它們的值在所有對象中都是相等的。
5.4 靜態函數
可以使用靜態函數來定義只在當前文件中使用的函數。這種方式可以保護函數的安全性,也可以減少函數名對其他程序的命名空間的污染。
5.5 外部變量
可以使用內部連接的const static關鍵字來定義外部變量。定義的外部變量在不同的文件中具有不同的作用域和內存空間。這種方式可以避免同名變量的衝突。
原創文章,作者:SDRZC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334186.html