字面值常量


類似42 這樣的值,在程序中被當作字面值常量。稱之為字面值是因為只能用它的值稱呼它, 稱之為常量是因為它的值不能修改。每個字面值都有相應的類型,例如:0 是 int 型,3.14159 是 double 型。只有內置類型存在字面值,沒有類類型的字面值。因此,也沒有任何標准庫類型的字面值。

整型字面值規則

定義字面值整數常量可以使用以下三種進制中的任一種:十進制、八進制和十六進制。 當然這些進制不會改變其二進制位的表示形式。例如,我們能將值 20定義成下列三種形式中的任意一種:

20 //二進制
024 //八進制
0x14 //十六進制

以 0(零)開頭的字面值整數常量表示八進制,以 0x 或 0X 開頭的表示十六進制。

字面值整數常量的類型默認為 int 或 long 類型,沒有 short 類型的字面值常量。其精度類型決定於字面值——其值適合 int 就是 int 類型,比 int 大的值就是 long 類型。

通過增加后綴,能夠強制將字面值整數常量轉換為 long、unsigned 或 unsigned long類型。通過在數值后面加 L 或者 l指定常量為 long 類型。

類似地, 可通過在數值后面加 U 或 u 定義 unsigned 類型。 同時加 L 和 U就能夠得到 unsigned long 類型的字面值常量。但其后綴不能有空格:

128u /* unsigned */ 1024UL /* unsigned long*/
1L /* long */   8Lu /* unsigned long*/

浮點字面值規則

通常可以用十進制或者科學計數法來表示浮點字面值常量。使用科學計數法時,指數用 E 或者 e 表示。默認的浮點字面值常量為 double 類型。在數值的后面加上 F 或 f 表示單精度。同樣加上 L 或者 l 表示擴展精度。

下面每一組字面值表示相同的值:

3.14159F       .001f        12.345L       0. 3.14159E0f     1E-3F     1.2345E1L       0e0

布爾字面值和字符字面值

true 和 false 是布爾型的字面值:

bool test = false;

可打印的字符型字面值通常用一對單引號來定義:

'a'   '2'   ','     '  ' // blank

這些字面值都是 char 類型的。在字符字面值前加 L 就能夠得到 wchar_t

類型的寬字符字面值。如:

L'a'

非打印字符的轉義序列

有些字符是不可打印的。不可打印字符實際上是不可顯示的字符,比如退格或者控制符。還有一些在語言中有特殊意義的字符,例如單引號、雙引號和反斜線符號。不可打印字符和特殊字符都用轉義字符書寫。轉義字符都以反斜線符號開始,C++ 語言中定義了如下轉義字符: 

換行符

\n

水平制表符

\t

縱向制表符

\v

退格符

\b

回車符

\r

進紙符

\f

報警(響鈴)符

\a

反斜線

\\

疑問號

\?

單引號

\'

雙引號

\"

 

 

字符串字面值

字符串字面值常量用雙引號括起來的零個或者多個字符表示。不可打印字符表示成相應的轉義字符。

為了兼容 C 語言,C++ 中所有的字符串字面值都由編譯器自動在末尾添加一個空字符。

'A'        //表示單個字符 A
"A"        //表示包含字母 A 和空字符兩個字符的字符串。

正如存在寬字符字面值,如:

L'a'

也存在寬字符串字面值,一樣在前面加“L”,如:

L"a wide string literal"

寬字符串字面值是一串常量寬字符,同樣以一個寬空字符結束。

字符串字面值的連接

兩個相鄰的僅由空格、制表符或換行符分開的字符串字面值(或寬字符串字面值),可連接成一個新字符串字面值。這使得多行書寫長字符串字面值變得簡單:

std::cout << "a multi-line "
              "string literal "
              "using concatenation"
              << std::endl;

執行這條語句將會輸出:

a multi-line string literal using concatenation

如果連接字符串字面值和寬字符串字面值:

std::cout << "multi-line " L"literal " << std::endl;

其結果是未定義的,也就是說,連接不同類型的行為標准沒有定義。這個程序可能會執行,也可能會崩潰或者產生沒有用的值,而且在不同的編譯器下程序的動作可能不同。

多行字面值

處理長字符串有一個更基本的(但不常使用)方法,這個方法依賴於很少使用的程序格式化特性: 在一行的末尾加一反斜線符號可將此行和下一行當作同一行處理。

C++ 的格式非常自由。特別是有一些地方不能插入空格,其中之一是在單詞中間。特別是不能在單詞中間斷開一行。但可以通過使用反斜線符號巧妙實現:

std::cou\ t << "Hi" << st\ d::endl;

等價於

std::cout << "Hi" << std::endl;

注意反斜線符號必須是該行的尾字符——不允許有注釋或空格符。同樣,后繼行行首的任何空格和制表符都是字符串字面值的一部分。正因如此,長字符串字面值的后繼行才不會有正常的縮進。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM