字面值常量(literal constant),“字面值”是指只能用它的值稱呼它,“常量”是指其值不能修改。每個字面值都有相應的類型,3.14是double型,2是int型。只有內置類型存在字面值。
1. 整形字面值規則
整形字面值常量可以用十進制、八進制、十六進制表示。
20 // dec
024 // oct(以0開頭)
0x14 // hex(以0x或0X開頭)
整形字面值常量的類型默認為int或long,其值適合int就是int類型,比int大就是long類型。在數值后加L或l(小寫字母l容易與數字1混淆,建議用L)可以指定為long,加U或u指定為unsigned類型,加UL或LU定義為unsigned long類型。沒有short類型的字面值常量。
2. 浮點字面值規則
可以用十進制或科學計數法(指數用E或e)表示,默認為double,在數值后加F或f表示單精度,加L或l表示擴展精度。
3.14159F .001f 12.345L 0.
3.14159E0f 1E-3F 1.2345E1L 0e0
3. 布爾字面值和字符字面值
布爾字面值:true、false。字符字面值由單引號定義:’2’(char類型)、L’a’(wchar_t類型)。
4. 非打印字符和轉義序列
非打印字符和特殊字符(如單引號、雙引號、反斜杠)都要寫為轉義字符(以反斜杠開頭)。
無論是普通字符,還是非打印字符和特殊字符,都可以表示為“通用轉義字符”。如八進制形式的“\7(響鈴符)、\12(換行符)、\0(空字符)、\62(數字2)”(可以對照ASCII碼表看一下)。“通用轉義字符”也可以用十六進制表示(\xddd)。
5. 字符串字面值
需要用雙引號括起來,非打印字符寫要轉義,編譯器會自動在末尾添加一個空字符。
“hello c++” // simple string literal “” // empty string literal “\n hello \t c++” // string literal using newlines and tabs L”hello c++” // a wide string literal
6. 字符串字面值的連接
兩個相鄰的,僅由空格、制表符、換行符分隔的字符串字面值,將連接在一起。
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;”,該語句結果未定義,可能執行也可能崩潰。
7 多行字面值
可以使用反斜杠,將多行內容當作同一行處理。
// multiline string literal std::cout << “a multi-line \ string literal \ using a backslash” << std::endl;
反斜杠必須是行尾字符,后面不能有注釋或空格。后繼行行首的任何空格和制表符都是字符串字面值的一部分。
【學習資料】 《c++ primer》