詳解C++中常量的類型與界說。本站提示廣大學習愛好者:(詳解C++中常量的類型與界說)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++中常量的類型與界說正文
常量是固定值,在法式履行時代不會轉變。這些固定的值,又叫做字面量。
常量可所以任何的根本數據類型,可分為整型數字、浮點數字、字符、字符串和布爾值。
常量就像是慣例的變量,只不外常量的值在界說後不克不及停止修正。
整數常量
整數常量可所以十進制、八進制或十六進制的常量。前綴指定基數:0x 或 0X 表現十六進制,0 表現八進制,不帶前綴則默許表現十進制。
整數常量也能夠帶一個後綴,後綴是 U 和 L 的組合,U 表現無符號整數(unsigned),L 表現長整數(long)。後綴可所以年夜寫,也能夠是小寫,U 和 L 的次序隨意率性。
上面羅列幾個整數常量的實例:
212 // 正當的 215u // 正當的 0xFeeL // 正當的 078 // 不法的:8 不是八進制的數字 032UU // 不法的:不克不及反復後綴
以下是各類類型的整數常量的實例:
85 // 十進制 0213 // 八進制 0x4b // 十六進制 30 // 整數 30u // 無符號整數 30l // 長整數 30ul // 無符號長整數
浮點常量
浮點常量由整數部門、小數點、小數部門和指數部門構成。您可使用小數情勢或許指數情勢來表現浮點常量。
當應用小數情勢表現時,必需包括小數點、指數,或同時包括二者。當應用指數情勢表現時,必需包括整數部門、小數部門,或同時包括二者。帶符號的指數是用 e 或 E 引入的。
上面羅列幾個浮點常量的實例:
3.14159 // 正當的 314159E-5L // 正當的 510E // 不法的:不完全的指數 210f // 不法的:沒有小數或指數 .e55 // 不法的:缺乏整數或分數
布爾常量
布爾常量共有兩個,它們都是尺度的 C++ 症結字:
我們不該把 true 的值算作 1,把 false 的值算作 0。
字符常量
字符常量是括在單引號中。假如常量以 L(僅當年夜寫時)開首,則表現它是一個寬字符常量(例如 L'x'),此時它必需存儲在 wchar_t 類型的變量中。不然,它就是一個窄字符常量(例如 'x'),此時它可以存儲在 char 類型的簡略變量中。
字符常量可所以一個通俗的字符(例如 'x')、一個本義序列(例如 '\t'),或一個通用的字符(例如 '\u02C0')。
在 C++ 中,有一些特定的字符,當它們後面有反斜槓時,它們就具有特別的寄義,被用來表現如換行符(\n)或制表符(\t)等。下表列出了一些如許的本義序列碼:
本義序列
\
\ 字符
\'
' 字符
\"
" 字符
\?
? 字符
\a
警報鈴聲
\b
退格鍵
\f
換頁符
\n
換行符
\r
回車
\t
程度制表符
\v
垂直制表符
\ooo
一到三位的八進制數
\xhh . . .
一個或多個數字的十六進制數
上面的實例顯示了一些本義序列字符:
#include <iostream> using namespace std; int main() { cout << "Hello\tWorld\n\n"; return 0; }
當下面的代碼被編譯和履行時,它會發生以下成果:
Hello World
字符串常量
字符串字面值或常量是括在雙引號 "" 中的。一個字符串包括相似於字符常量的字符:通俗的字符、本義序列和通用的字符。
您可使用空格做分隔符,把一個很長的字符串常量停止分行。
上面的實例顯示了一些字符串常量。上面這三種情勢所顯示的字符串是雷同的。
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
界說常量
在 C++ 中,有兩種簡略的界說常量的方法:
#define 預處置器
上面是應用 #define 預處置器界說常量的情勢:
#define identifier value
詳細請看上面的實例:
#include <iostream> using namespace std; #define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' int main() { int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
當下面的代碼被編譯和履行時,它會發生以下成果:
50
const 症結字
您可使用 const 前綴聲明指定類型的常量,以下所示:
const type variable = value;
詳細請看上面的實例:
#include <iostream> using namespace std; int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = '\n'; int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
當下面的代碼被編譯和履行時,它會發生以下成果:
50
請留意,把常量界說為年夜寫字母情勢,是一個很好的編程理論。
常量的援用
假如是對一個常量停止援用,則編譯器起首樹立一個暫時變量,然後將該常量的值置入暫時變量中,對該援用的操作就是對該暫時變量的操作。對C++常量援用可以用其它任何援用來初始化;但不克不及轉變。
關於援用的初始化有兩點值得留意:
(1)現在始化值是一個左值(可以獲得地址)時,沒有任何成績;
(2)現在始化值不是一個左值時,則只能對一個const T&(常量援用)賦值。並且這個賦值是有一個進程的:
起首將值隱式轉換到類型T,然後將這個轉換成果寄存在一個暫時對象裡,最初用這個暫時對象來初始化這個援用變量。
例子:
double& dr = 1; // 毛病:須要左值 const double& cdr = 1; // ok
第二句現實的進程以下:
double temp = double(1); const double& cdr = temp;
作函數參數時:
// bc_temp_objects_not_bound_to_nonconst_ref.cpp // compile with: /EHsc #include "iostream" using namespace std; class C {}; void f(C & c) { cout << "C&" << endl; } void f(C const & c) { cout << "C const &" << endl; } int main() { f(C()); }
成果:
C const &
更直接的,用根本類型:
#include <iostream> using namespace std; void display(int const &ref) {cout<<ref<<'\n';} int main() { int i=1; display(i); int const anotheri=2; display(anotheri); display(2); display(1+2); display(static_cast<int>(3.14159)); }
經由過程C++常量援用從函數前往一個部分對象:
普通從一個函數前往一個部分對象的援用是纰謬的:
T & my_op ( void ) { T t; return t; } // The T object t got destroyed here so the returned reference is not valid anymore.
特別情形:前往一個常援用
const T & my_op ( void ) { T t; return t; } const T & my_t_obj = my_op ();
在這個情形下,部分變量 t 不會被直接析構,而是會保存到 my_t_obj 的性命周期停止為止。
總之,C++常量援用語法上可以援用一個暫時變量。這類辦法在應用援用作函數參數和前往部分變量時成心義。我今朝看來常量援用重要用在作函數參數或包管不修正原變量的時刻。