字面值表达式
语法
字面值表达式 :
字符字面值
| 字符串字面值
| 原始字符串字面值
| 字节字面值
| 字节字符串字面值
| 原始字节字符串字面值
| 整数字面值
| 浮点数字面值
|true|false
字面值表达式 仅由一个单独的 token 组成,其直接指示计算结果值,而不是通过名称或其他计算规则的间接引用。
字面值是 常量表达式 的其中一种形式,因此在编译时计算 (主要) 。
先前描述的词法 字面值 每种形式都可以形成字面值表达式,关键字 true 和 false 也可以。
#![allow(unused)] fn main() { "hello"; // 字符串类型 '5'; // 字符类型 5; // 整数类型 }
字符字面量表达式
字符字面量表达式由一个 字符字面值 token 构成。
注意: 此部分内容不完整。
字符串字面量表达式
字符串字面量表达式由一个 字符串字面值 或 原始字符串字面值 token 构成。
注意: 此部分内容不完整。
字节字面量表达式
字节字面量表达式由一个 字节字面值 token 牌构成。
注意: 此部分内容不完整。
字节字符串字面量表达式
字节字符串字面量表达式由一个 字节字符串字面值 或 原始字节字符串字面值 token 构成。
注意: 此部分内容不完整。
整型字面值表达式
整型字面值表达式由一个 整数字面值 token 组成。
如果 token 有 后缀 ,则后缀必须是 基本整数类型 中的一个名称: u8 、 i8 、 u16 、 i16 、 u32 、 i32 、 u64 、 i64 、 u128 、 i128 、 usize 或 isize ,且表达式具有该类型。
如果 token 没有后缀,则该表达式的类型由类型推断确定:
- 
如果整型类型可以从周围的程序上下文中确定,则表达式具有该类型。
 - 
如果程序上下文中的整型类型不足以确定类型,则默认为有符号的 32 位整型
i32。 - 
如果程序上下文中的整型类型过多,则被视为静态类型错误。
 
整型字面量表达式的例子:
#![allow(unused)] fn main() { 123; // type i32 123i32; // type i32 123u32; // type u32 123_u32; // type u32 let a: u64 = 123; // type u64 0xff; // type i32 0xff_u8; // type u8 0o70; // type i32 0o70_i16; // type i16 0b1111_1111_1001_0000; // type i32 0b1111_1111_1001_0000i64; // type i64 0usize; // type usize }
该表达式的值根据 token 的字符串表示如下确定:
- 
通过检查字符串的前两个字符,选择整数基数,如下:
0b表示基数为 2。0o表示基数为 8。0x表示基数为 16。- 否则,基数为 10。
 
 - 
如果基数不是 10,则从字符串中删除前两个字符。
 - 
从字符串中删除任何后缀。
 - 
从字符串中删除任何下划线。
 - 
将字符串转换为
u128值,就像通过u128::from_str_radix选择的基数一样。如果值不适合u128,则会出现编译器错误。 - 
通过 数字转换 将
u128值转换为表达式的类型。 
注意: 如果该字面值的值超出了该类型的表示范围,最终转换将截断该字面值。
rustc包括一个名为overflowing_literals的 [代码分析检查] lint check ,默认为deny,拒绝其中出现的表达式。
注意: 例如,
-1i8是对字面值表达式1i8应用了 取反运算符 ,而不是一个整数字面值表达式。有关表示有符号类型的最大负值的注解,请参见 溢出 。
浮点数字面值表达式
浮点数字面值表达式具有以下两种形式:
如果 token 具有 后缀 ,则后缀必须是 浮点类型 f32 或 f64 之一,且表达式具有该类型。
如果 token 没有后缀,则表达式的类型由类型推断确定:
- 
如果可以从周围的程序上下文中 唯一 确定浮点类型,则表达式具有该类型。
 - 
如果程序上下文不足以确定类型,则默认为
f64。 - 
如果程序上下文类型约束冲突,则被视为静态类型错误。
 
浮点数字面值表达式的示例:
#![allow(unused)] fn main() { 123.0f64; // type f64 0.1f64; // type f64 0.1f32; // type f32 12E+99_f64; // type f64 5f32; // type f32 let x: f64 = 2.; // type f64 }
表达式的值根据 token 的字符串表示形式确定,具体如下:
- 从字符串中删除任何后缀。
 - 从字符串中删除任何下划线。
 - 将字符串转换为表达式的类型,如同通过 
f32::from_str或f64::from_str处理。 
注意: 例如,
-1.0是对字面表达式1.0应用 取反运算符 ,而不是单个浮点字面值表达式。
注意:
inf和NaN不是字面值 token 。 可以使用f32::INFINITY、f64::INFINITY、f32::NAN和f64::NAN常量来代替字面值表达式。 在rustc中,被评估为无限大的字面值将触发overflowing_literals代码分析检查。
布尔字面值表达式
布尔字面值表达式由 true 或 false 中的一个关键字组成。
该表达式的类型为原始的 布尔类型 ,其值是:
- 如果关键字是 
true,则为真 - 如果关键字是 
false,则为假