0x01 什么是字面值常量?
一个形如42的值被称作字面值常量(literal),每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。
0x02 常见字面值
整型字面值
我们可以将整型字面值写作十进制数、八进制数或者十六进制数的形式。
以下是三种表示数值20的方法:
20 //这是一个十进制的20
024 //用0开头代表八进制数
0x14 //用0x开头代表十六进制数
1、整型字面值具体的数据类型由它的值和符号决定:
2、默认情况下,十进制字面值是带符号数,八进制和十六进制字面值可能带符号也可能无符号;
3、十进制字面值的类型是int、long和long long中尺寸刚好能容纳下当前值的最小一个;
4、八进制和十六进制字面值的类型是int、unsigned int、long、unsigned long、long long和unsigned long long中尺寸刚好能容纳下当前值的最小一个;
5、类型short没有对应的字面值;
6、如果一个字面值连与之关联的最大数据类型都装不下,将产生错误;
7、尽管整型字面值可以存储在带符号的数据类型中,但严格来说,十进制字面值不是复数。例如我们使用了-20,负号其实仅仅起到对字面值取负值的作用,并不在字面值内。
浮点型字面值
浮点型字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用E或e标识出来:
3.14159
3.14159e0
0.
.001
0e0
0E0 //以上均为浮点数的合法表达
浮点型字面值默认为一个double。
字符和字符串字面值
1、由单引号括起来的一个字符称为char字面值,双引号括起来的零个或多个字符则构成字符串类型字面值:
'a' //字符字面值
"An apple!" //字符串字面值
2、字符串字面值的类型实际上是由常量字符构成的数组,编译器会自动在每个字符串的结尾添加一个空字符( '\0' ),因此,字符串字面值的实际长度总是比它的内容多1;
3、如果两个字符串字面值位置紧邻且仅由空格、缩进或者换行符间隔,则它们实际上是一个整体:
布尔字面值和指针字面值(往后章节详细介绍)
true和false是布尔类型的字面值;
nullptr是指针字面值,代表一个空指针。
0x03 指定字面值类型
通过添加表中的前缀和后缀,可以改变整型、浮点型和字符型字面值的默认类型:
指定字面值类型的前后缀列表
1、对于一个整型字面值,我们能分别指定它是否带符号和占用多少空间;
2、后缀中有U,则代表该字面值是无符号类型,数据类型可以是unsigned int、unsigned long和unsigned long long中尺寸刚好能容纳下的最小一个;
3、后缀中有L,数据类型至少是long;
4、后缀中有LL,数据类型将是long、long long、unsigned long long中的一种;
5、U可以与L或LL结合使用:
L'a' //宽字符型字面值,数据类型是wchar_t
u8"hi!" //UTF-8字符串字面值
20ULL //无符号整型字面值,数据类型是unsigned long long
1E-3F //单精度浮点型字面值,数据类型是float
3.14159L //扩展精度浮点型字面值,数据类型是long double
6、当使用一个长整型的字面值时,应习惯性使用大写字母L来标记,因为小写字母l和数字1很容易混淆,不方便程序的检查和阅读。
-----------(我是分割线)-----------
这里的学习顺序基于《 C++ Primer(第五版)》,虽说这本书是C++神书,但如果没有一定的C语言基础,肯定很难一下子啃下来,特别是原书第一章说编写一个简单的程序,结果各种语句和输入输出流都出现了,最后还来个类简介,实在是有点让新手朦逼。就算有一定的C++基础,中文版的语言也略显拗口。
所以,我建议可以先用谭浩强的C/C++系列高校用书籍来打个基础。先别管网上对谭教授的教材评价如何,至少它能高效地带你入门。直接学习C++不是不可以,但毕竟C语言是一门经典的计算机语言,经久不衰,还衍生出了很多其他的计算机语言。学好C语言能培养出一种理解计算机语言的思维模式,以后学其他语言都可能事半功倍。
我个人的学习方式是“先看懂,后深入,再高效”。在这里会按照我的理解,尽量用简单的语言来解释C++的知识点,至少先看懂并让程序能用再说。如果有错欢迎指正。
文中可能有某些程序段来自pezy大神,自学C++的路上我有很多疑难都是在pezy大神的解释中顿悟。在此表示感谢!
任何地方如有侵权请立即联系删除。
-----------(我是分割线)-----------