字面常量


在程序中写下 1、1.0、3.14159 这样的数值,这类数值称为字面常量(Literal constant),程序中若写下一个整数值,例如 1 这个数值的话,默认会是个int类型无正负号的数值,而如果在程序中写下 1.0,3.14 等小数时,默认会是double类型的数值,例如下面这个程序显示出来的大小分别是intdouble的大小:

#include <iostream> 
using namespace std; 

int main() { 
    cout << "sizeof(1):\t"   << sizeof(1)   << "\n";
    cout << "sizeof(1.0):\t" << sizeof(1.0) << "\n";

    return 0; 
}

执行结果:

sizeof(1):      4
sizeof(1.0):    8

整数字面常量可以用 8 进制、10 进制与 16 进制,一般习惯使用 10 进制,如果要使用 8 进制的字面常量,开头加上 0 就可以了,如果要使用 16 进制字面常量,开头加上 0x,C++ 14 支持 2 进制表示,使用 0b 开头。

例如下面的程序各显示 10 进制 26 的 8 进制、16 进制与 2 进制写法:

#include <iostream> 
using namespace std; 

int main() { 
    cout << 26 << "\n";       // 10 进制
    cout << 032 << "\n";      // 8 进制
    cout << 0x1A << "\n";     // 16 进制
    cout << 0b11010 << "\n";  // 2 进制(C++ 14)

    return 0; 
}

由于cout输出整数值时,都会以 10 进制显示,所以上面的程序中四行陈述都会显示 26。

您可以在整数值之后加上L,表示该整数值要是long类型,例如1L,C++ 11 可以使用LL表示long long,十进制整数字面常量默认是有符号的,也可以指定为无符号整数,可使用Uu来指定,例如1ULU可以同时指定,例如1UL1LU;八进制或十六进制整数字面常量可能是有符号或无符号。

对于浮点数的话,可以在写下浮点数值时,以Ff表示使用float类型,例如3.14f,也可以使用科学计数,例如20000可以表示为2e4

字符字面常量则以单引号来包括一个字符,例如'A''1'都表示一个字符字面常量,而有些字符与 C++ 语法符号相同,例如"'\等,在程序中表现这些字符要转义(Escape),即\"\'\\,其他还有一些「不可见字符」,也要以转义来表示,底下列出常用的转义表示:

  • \n:换行、新行(newline)
  • \t:水平定位点(horizontal tab)
  • \v:垂直定位点(vertical tab)
  • \b:退回一格(backspace)
  • \r:返回(carriage return)
  • \f:换页(formfeed)
  • \a:哔声(alert bell)
  • \\:倒斜线(backslash)
  • \?:问号
  • \':单引号
  • \": 双引号
  • \nnn:nnn 为一到三个 8 进制数字,表示字符编码,例如 \115
  • \xnn.:nn 为多个 16 进制数字,表示字符编码,通常用两个数字,例如 \xb4\xfa,
  • \unnnn:Unicode 码 U+nnnn 表示(C++ 11)
  • \Unnnnnnnn:Unicode 码 U+nnnnnnnn 表示(C++ 11)

其他还有R"(...)"L"..."u8"..."u"..."U"..."等字面常量,这就等到之后谈到字符串时一并说明。

C++ 内置的 I/O 控制器(manipulator)endl会输出换行字符并清空缓冲区,例如:

cout << "Hello! World!" << endl;

在 C++ 中如果以""来包括一串文本的话,即为字符串字面常数,例如"Hello! World!"就是字符串字面常数,字符串字面常量由char数组组成,多字节字符使用char来存储码元(code unit),每一个字符串最后会以一个null字符结束。

truefalse也是字面常数,对应类型为bool


展开阅读全文