字面量
语法
| 形式 | 语法 |
|---|---|
| 1 | [1-9] [0-9]* |
| 2 | 0 [0-9]* |
| 3 | 0 b | B [0 | 1]+ |
| 4 | 0 x | X [0-9a-fA-F]+ |
| 5 | ' 非 ' 的字符 | 合法转义序列 ' |
| 6 | [0-9]* . [0-9]+ |
| 7 | [0-9]+ (. [0-9]+)? e -? [0-9]+ |
| 8 | " [非 " 的字符 | 合法转义序列]* " |
| 9 | """ 任意字母1 任意字符 * """ 任意字母1 |
| 10 | true | false |
| 11 | nil |
注释:
- 任意字母 是指任意单个字母(
a-z、A-Z)。 任意字母 的内容必须在开始和结束时相同。
描述
字面量在 GS 中用于表达如同字面表示的固定值,字面量始终是常量。
整数字面量
如 形式1,2,3,4,5 所表示的是整数(int) 类型的字面量;因为 GS 的整数类型是 64 位有符号数,
所以整数字面量表示的值必须在 -9223372036854775808 到 9223372036854775807 之间。超出
这个范围的整数字面量会导致编译错误。
GS 支持十进制(形式1)、八进制(形式2)、二进制(形式3)和十六进制(形式4)的整数字面量表示法。
如形式5 所表示的字符字面量,其值为该字符的 Unicode 码点值(int 类型)。
字符字面量可以是一个表示单个字符的合法转义序列。
浮点数字面量
如 形式6,7 所表示的是浮点数(float) 类型的字面量;
GS 的浮点数类型是 64 位双精度浮点数,符合 IEEE 754 标准,所以浮点数字面量表示的值必须在
-1.7976931348623157e308 到 1.7976931348623157e308 之间。超出此范围的字面量可能溢出为
inf 或 -inf。
绝对值小于 5e-324 的浮点数字面量会被视为 0.0(如果是负数,则为 -0.0)。
支持科学计数法(形式7)的浮点数字面量表示法。
字符串字面量
如形式8,9 所表示的是字符串(string) 类型的字面量;
字符串的内容可以包含任意 Unicode 字符。或可以使用合法的转义序列来表示一些特殊字符。
普通的字符串字面量(形式8)必须写在一行内,且不能包含未转义的换行符:
string str = "abc\n123"; // Ok
// string str = "abc
// 123"; // Bad
string str2 = "abc, \
123"; // Ok, last line end with '\'
形式9 所表示的多行字符串字面量可以跨越多行,且会保留所有的换行符和缩进空格。
可以在多行字符串字面量的开始和结束处使用任意相同的字母来界定字符串内容,这意味着只要 使用不同的字母,允许嵌套多行字符串字面量:
string str =
"""A
This is a multi-line string.
It can contain "quotes" and 'single quotes' without needing to escape them.
It can also contain another multi-line string:
"""B
This is a nested multi-line string.
It can also contain "quotes" and 'single quotes' without needing to escape them.
"""B
End of the nested multi-line string.
"""A
布尔字面量
如形式10 所表示的是布尔(bool) 类型的字面量,true 表示真,false 表示假。
空字面量
如形式11 所表示的是空(nil) 字面量,表示一个空值。
转义序列
在字符字面量和字符串字面量中,可以使用以下转义序列来表示一些特殊字符:
| 转义序列 | 说明 |
|---|---|
| \' | 单引号字符 ' |
| \" | 双引号字符 " |
| \\ | 反斜杠字符 \ |
| \n | 换行符 |
| \t | 制表符(Tab) |
| \r | 回车符 |
| \b | 退格符 |
| \a | 等同于 \x07,响铃符 |
| \e | 等同于 \x1B,转义符(常用于终端控制序列) |
| \ooo | 八进制表示的字符,ooo 是 1 到 3 位的八进制数字,表示的值必须在 0 到 255 之间 |
| \xhh | 十六进制表示的字符,hh 是 1 到 2 位的十六进制数字,表示的值必须在 0 到 255 之间 |