首页 理论教育 C++字面值常量,零基础进阶

C++字面值常量,零基础进阶

时间:2023-08-20 理论教育 版权反馈
【摘要】:在介绍字面值常量之前,让我们先来看一个小程序:动手写3.2.1动手写3.2.1中用两种方式打印数字,其中第一种方式是直接使用具体数字的值,我们称之为字面值常量。运行结果如图3.2.1所示:图3.2.1浮点型字面值常量对于整数和浮点数来说,后缀其实就是对字面值常量的限定符。

C++字面值常量,零基础进阶

在介绍字面值常量之前,让我们先来看一个小程序:

动手写3.2.1

动手写3.2.1中用两种方式打印数字,其中第一种方式是直接使用具体数字的值,我们称之为字面值常量(Literal Constant)。正如动手写3.2.1所示,使用字面值常量会非常直截了当,省去了类型的定义。但也正因为这样,没有类型的值会造成歧义或者意想不到的结果,这点在之后的类型转换一节中我们也会提到。同样地,在程序中使用这种不加说明的数字也会令人困惑,这种莫名其妙的字面量也叫作幻数(Magic Number)。此外,如果在多个地方使用相同的字面值常量,虽然编译器可能会优化成同一个值,但这样会使程序容易出错,因为在修改程序时,只要漏改一处,就会导致异常的程序行为。

动手写3.2.2

动手写3.2.2是要计算4个3的乘积,结果其中有一个3写成了2。这样会导致结果跟预期不一致,而且在大型程序中会很难调试。

为了区分不同类型的字面值常量,我们使用不同的方式来表示:

1.整型字面值常量;

2.浮点字面值常量;

3.布尔字面值常量;

4.字符字面值常量;

5.字符串字面值常量;

6.转义字符。

接下来,我们用示例来简单介绍每一个字面值常量:

动手写3.2.3

动手写3.2.3展示了各种整型的字面值常量。在数字前面加不同前缀可以表示不同进制的数,而在数字后面加不同后缀则可以区分不同类型的整型。

提示

字面值常量中的字母不区分大小写,例如表示十六进制前缀的0x和0X都是合法的。

动手写3.2.4

动手写3.2.4展示了各种浮点型的字面值常量。在数字中我们可以用e来表示科学计数法,用后缀f和l来表示该类型是float还是long double类型。要注意的是,有一些比较特殊的表示浮点数的方法,即省略小数点前或后的数字,这个时候省略的部分默认为0。(www.xing528.com)

运行结果如图3.2.1所示:

图3.2.1 浮点型字面值常量

对于整数和浮点数来说,后缀其实就是对字面值常量的限定符。一个高精度的浮点型字面值常量加上f后缀后,会自动转换为float,从而损失精度;而一个负整数加上u后缀后,也会自动转换成对应的unsigned所表示的正整数。在实际编程中,笔者还是推荐读者使用变量,具体请参见3.2.2小节

布尔字面值常量就是true和false,在之前的章节中已经提到过。

字符字面值常量就像之前介绍的那样用一对单引号('')来定义。如果在单引号前面加上L(例如L'0'),我们就得到了宽字符类型的字面值常量。

字符串字面值常量和字符字面值常量类似,只是把单引号改成了双引号("")。此外L前缀的规则也适用,如L"零壹快学"就是一个宽字符组成的字符串。

转义字符(Escape Character)是具有文本格式控制以及其他特殊功能的不可显示字符的表示形式。上文介绍的ASCII码中靠前的很多控制字符就可以用转义字符来表示。简单地说,转义字符就是利用反斜杠(\)对之后的字符进行重新解读。

我们通过一个示例来了解转义字符:

动手写3.2.5

动手写3.2.5中,两个字符串的区别就是第二个字符串中多了一个“\”。运行结果如图3.2.2所示:

图3.2.2 换行转义字符的效果

从运行结果中我们可以看到,第二个字符串从第二个单词开始另起一行,而且“n”不见了。这是因为编译器在看到“\”的时候就继续往下搜索,看到“n”之后就把“\n”一起解读成表示换行的转义字符。

如果我们要打印“\”这个反斜杠符本身,那应该怎么办呢?答案很简单,就是使用“\\”,第一个反斜杠会跟第二个反斜杠一起构成一个可以打印的反斜杠符的字符。相同的道理也适用于单引号和双引号,因为这两者一般情况下需要作为字符和字符串的边界。接下来我们再看一个用转义字符打印特殊符号的示例:

动手写3.2.6

运行结果如图3.2.3所示:

图3.2.3 用转义字符打印特殊字符

提示

由于转义字符在ASCII中也有对应的字符编号,所以我们也可以用反斜杠“\”加上编号来表示转义字符,如“\n”对应的就是“\12”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈