类型
类是一种类型,是对象的模板,而不是变量或对象。它内部本身不包含对象。只是声明了这种对象的存在。只有创建对象的时候,才会真正的创建对象内部的对象。
1 类型
- 简单类型
- 整型
int、short、long、longlong、bool、char、size_t - 浮点型
float、double、long double
- 整型
- 复合类型
- 引用
&a - 指针
*pointer - 数组
a[] - 字符串
"hello world"
- 引用
- 自定义类型
- 类
class - 结构体
struct - 枚举
enum - 联合体
union
- 类
关于size_t的说明:size_t是标准C库中定义的,在64位系统中为long long unsigned int,非64位系统中为long unsigned int。使用size_t可能会提高代码的可移植性、有效性或者可读性,或许同时提高这三者。因为其是基于平台变化的最大支持的无符号整型。
2 字面值常量
常量主要包括字面值常量和自定义常量。
整型字面常量
- 不同进制指的是字面格式,其转化为存储格式时,都会变成二进制存储。不必担心十进制与二进制之间的运算。字面常量只是一种数字的表示方法。24,,024,,0x24。会自动选用尺寸最小的整型进行存储;负号是对字面值取相反数,不是字面值的一部分。
85 // 十进制
0213 // 八进制
0x4b // 十六进制
30 // 整数
30u // 无符号整数
30l // 长整数
30ul // 无符号长整数
浮点型字面值常量
- 默认情况下使用 double 存储。3.14,3.14E0,10e4
3.14159 // 合法的
314159E-5L // 合法的
510E // 非法的:不完整的指数
210f // 非法的:没有小数或指数
.e55 // 非法的:缺少整数或分数
字符和字符串的字面常量
- ‘a’"adbd"字符串的字面值是由字符数组构成的。编译器会在每个字符串常量的末尾添加一个’\0’
转义序列
\n\t\a\v\\\b\"\?\'\r\f
\7\0\12\115
可以指定字面值常量的类型。字面值会有默认的常量类型。
- 常见前缀
u(Unicode 16)U(unicode32) L(宽字符) u8(utf-8) - 常见后缀
u/U(unsigned),l/L(long),ll/LL(longlong),f/F(float)
bool字面值常量
false,true
指针字面值常量
NULL//C中是NULL
nullptr//C++中是nullptr
自定义常量
这些常量都不是字面值常量,而是用户自定义的常量。在 C++ 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器。编译器常量,编译期间使用常量代替原来的值。
- 使用 const 关键字。运行时常量,运行时值不可修改。
3 变量
关于 C++中常见的描述总结:对象 object,存储数据并具有某种类型的内存空间。已经命名的对象叫变量。变量和对象通常通用。值表示只读的数据。变量和对象是可变的数据。
变量的声明(extern)
- 分离式编译机制:声明和定义可以分离。声明使得程序可以被程序所知道,定义负责创建与名字关联的实体(变量空间)。多个文件可以独立编译。声明并没有申请对象空间(变量空间)。
- extern 可以声明,而不进行定义。变量可以被声明很多次,但只能被定义一次。不能再函数体中对 extern 声明的变量进行修改,extern 声明的变量只能是外部变量。
- 函数不需要使用extern即可实现声明和定义分离。
- 多次声明必须兼容,类型一致。
extern int i;//声明,但没有申请对象空间。
int j;//声明并定义了,申请了兑现该控件
变量的定义和初始化
变量定义的时候,编译器会分配内存空间。并执行初始化函数。
- 默认初始化:变量没有被显示初始化。
- 值初始化:()
- 直接初始化:使用(val)进行初始化。
- 拷贝初始化:使用=进行初始化
- 列表初始化:使用{}进行初始化。
int d;//默认初始化
int d();//值初始化
int d(1);//直接初始化
int d = 1;//复制初始化
int e = {2};//复制初始化
int f{3};//花括号列表初始化
初始化相关的内容参考初始化的方法。
初始化和赋值是两个不同点操作。使用等号能够表示赋值,也能够实现初始化。
C++是静态类型语言。在编译阶段,进行类型检查。
4 标识符与关键字。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZW3mSZz-1688957645893)(image/2021-03-03-17-45-17.png)]
5 作用域
作用域定义
- 全局作用域:名字在所有花括号之外。
- 块作用域:名字在其他作用域内。
- 函数体作用域
- 类作用域
- 普通块作用域
作用域作用
- 内层作用域,外层作用域。
- 控制名称的可见性,防止出现明明冲突。
- 在进行符号查找的时候先查找内部作用域,再查找外层作用域。直到发现符号。
6 C++中有两种类型的表达式
-
左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
-
右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
-
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
文章介绍了C++中的基本类型,如整型、浮点型、引用和指针,以及字面值常量的使用,包括不同进制的整数和浮点数,字符串和字符。还讨论了变量的声明、定义、初始化,以及作用域的概念,区分了左值和右值表达式。
6609

被折叠的 条评论
为什么被折叠?



