在C語言的學習中,我們已經介紹了變數和常數的內容,但是在C++中關於常數卻有了新的特性,因此下面 下麪九江講解C++中的常數
所謂常數是指不能修改值的量
在C++中,常數可以是以下形式
字面常數是指我們原始碼中所出現的任何的常數,它可以是任何型別,例如
#include <iostream>
//匯入名稱空間
using namespace std;
//主程式
int main(){
int num = 10;
cout << "Hello World !" << endl;
return 0;
}
在上面的程式中,我們宣告瞭一個變數num並將其初值賦爲10,10是程式碼的一部分,被編譯到最終的二進制程式中,是無法修改的,因此10是一個字面常數
其次,我們輸出了Hello World !
,同樣Hello World !
作爲程式的一部本被編譯入二進制檔案,是無法修改的常數,因此也是一個字面常數
實際上在C++中,允許使用者定義自己的字面常數,例如37.5_C(攝氏度),97.0_F(華氏度)
這些後綴被編譯器視爲使用者自己定義的字面常數,這一點將在後面講解
我們可以對任意一個變數使用const關鍵字來宣告其爲一個常數,那麼在接下來的程式中,任何爲該變數重新賦值的語句都不會被允許,否則會報錯
並且我們使用const關鍵字宣告一個常數的時候,必須爲其賦予初值,否則將會報錯
使用const關鍵字的最大的好處就是將常數與標識名關聯了起來,這樣便於參照與查詢錯誤
例如
#include <iostream>
//匯入名稱空間
using namespace std;
int main(){
const int num_1=10;
return 0;
}
這裏我們申明瞭一個常數num_1並在開始爲其賦予了初值10
使用關鍵字constexpr使得常數的宣告類似與一個函數,而且必須放在主函數外
#include <iostream>
//匯入名稱空間
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
int main(){
return 0;
}
使用常數表達式的好處就是爲程式的優化提供了可能性
如果我們以下面 下麪的方式宣告一個變數
double Pi=22.0 / 7;
那麼在我們每次參照Pi的時候,編譯器都會重新計算22.0 / 7的值,這樣就造成了效能的開銷
使用常數表達式定義的變數,編譯器只會在定義的時候進行一次計算,在參照的時候就會將變數名直接替換爲該值
此外,我們還能在另外一個常數表達式中參照另外一個常數表達式
#include <iostream>
//匯入名稱空間
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
constexpr double GetDoublePi() { return 2*GetPi(); }
int main(){
return 0;
}
我們呼叫常數表達式和函數類似
#include <iostream>
//匯入名稱空間
using namespace std;
constexpr double GetPi(){ return 22.0/7; }
constexpr double GetDoublePi() { return 2*GetPi(); }
int main(){
cout << GetPi() << endl;
cout <<GetDoublePi() << endl;
return 0;
}
>>>
3.14286
6.28571
最後,常數表達式並不一定能夠實現程式優化,例如定義的常數表達式是返回使用者輸入的數位的兩倍,這樣的話,由於編譯器無法提前預知使用者的輸入,因此是無法提前編譯實現優化的
在C語言的學習中,我們講解了使用enum關鍵字定義列舉體以及如何使用列舉變數。
我們使用enum關鍵字定義一個列舉體的本質是將一些常數關聯起來,而定義的列舉體實際上是一種新的數據型別,只不過取值限定在我們所指定的範圍內
因此,在列舉體中列出的量實際上也是常數,我們能夠使用與值關聯的標識名來獲取值
#include <iostream>
//匯入名稱空間
using namespace std;
enum Workday{
Monday=1,
Tuesday=2,
Wednesday=3,
Thurday=4,
Friday=5,
Saturday=6,
Sunday=7
};
int main(){
cout << "Monday = " << Monday <<endl;
cout << "Sunday = " << Sunday <<endl;
return 0;
}
此外,如果我們像爲一個變數賦值爲列舉體中的值,該變數必須爲該列舉型變數
#include <iostream>
//匯入名稱空間
using namespace std;
enum Workday{
Monday=1,
Tuesday=2,
Wednesday=3,
Thurday=4,
Friday=5,
Saturday=6,
Sunday=7
};
int main(){
Workday day_1=Monday;
Workday day_2=Sunday;
cout << "Monday = " << day_1 <<endl;
cout << "Sunday = " << day_2 <<endl;
return 0;
}
使用define定義的常數在c語言的學習中已經講解過,這裏不再講解