2 C++ 基本内置类型-3 字面值常量

  一个形如 42 的值被称作字面值常量。字面值常量的形式和值决定了它的数据类型。

3.1 整数和浮点型字面值

  我们可以将整型字面值写作十进制数、八进制数或十六进制数的形式。以0开头的整数代表八进制数,以0x0X开头的代表十六进制数。

  整型字面值具体的数据类型由它的值和符号决定。默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。十进制字面值的类型是intlonglong long中尺寸最小的那个,当然前提是这种类型要能容纳下当前的值。八进制和十六进制字面值的类型是能容纳其数值的intunsigned intlongunsigned longlong longunsigned long long中尺寸最小者。如果一个字面值连与之关联的最大的数据类型都放不下,将产生错误。类型short没有对应的字面值。

  尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。如果我们使用了一个形如 -42 的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已。

  浮点型字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用Ee标识。默认的,浮点型字面值是一个double

3.2 字符和字符串字面值

  由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。

'a'               // 字符字面值
"Hello World!"    // 字符串字面值

字符串字面值的类型实际上是由常量字符构成的内置数组。编译器在每个字符串的结尾处添加一个空字符('\0'),因此,字符串字面值的实际长度要比它的内容多 1。例如,字面值'A'表示的就是单独的字符 A,而字符串"A"则代表了一个字符的内置数组,该内置数组包含两个字符:一个是字母 A,另一个是空字符。

  如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则它们实际上是一个整体。当书写的字符串字面值比较长,写在一行里不太合适时,就可以采取分开书写的方式:

// 分多行书写的字符串字面值
std::cout << "a really, really long string literal "
			 "that spans two lines" << std::endl;

3.3 转义序列

  有两类字符,程序员不能直接使用:一类是不可打印的字符,如退格或其它控制字符,因为它们没有可视的图符;另一类是在 C++ 中有特殊含义的字符(单引号、双引号、问号、反斜线)。在这些情况下需要用到转义序列。转义序列均以反斜线作为开始,C++ 最常用的转义序列就是换行符\n

  在程序中,转义序列被当作一个字符使用:

std::cout << '\n';         // 转到新一行

3.4 布尔字面值和指针字面值

  truefalse是布尔类型的字面值。nullptr是指针字面值。

上一篇:Vector Optimization – Multiple Lanes


下一篇:2024.11.13(一维数组相关)