1 数据类型
类型
类是一种类型,是对象的模板,而不是变量或对象。它内部本身不包含对象。只是声明了这种对象的存在。只有创建对象的时候,才会真正的创建对象内部的对象。
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。会自动选用尺寸最小的整型进行存储;负号是对字面值取相反数,不是字面值的一部分。
1 | 85 // 十进制 |
浮点型字面值常量
- 默认情况下使用 double 存储。3.14,3.14E0,10e4
1 | 3.14159 // 合法的 |
字符和字符串的字面常量
- ‘a’”adbd”字符串的字面值是由字符数组构成的。编译器会在每个字符串常量的末尾添加一个’\0’
转义序列
1 | \n\t\a\v\\\b\"\?\'\r\f |
可以指定字面值常量的类型。字面值会有默认的常量类型。
- 常见前缀
u(Unicode 16)U(unicode32) L(宽字符) u8(utf-8) - 常见后缀
u/U(unsigned),l/L(long),ll/LL(longlong),f/F(float)
bool字面值常量
1 | false,true |
指针字面值常量
1 | NULL//C中是NULL |
自定义常量
这些常量都不是字面值常量,而是用户自定义的常量。在 C++ 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器。编译器常量,编译期间使用常量代替原来的值。
- 使用 const 关键字。运行时常量,运行时值不可修改。
3 变量
关于 C++中常见的描述总结:对象 object,存储数据并具有某种类型的内存空间。已经命名的对象叫变量。变量和对象通常通用。值表示只读的数据。变量和对象是可变的数据。
变量的声明(extern)
- 分离式编译机制:声明和定义可以分离。声明使得程序可以被程序所知道,定义负责创建与名字关联的实体(变量空间)。多个文件可以独立编译。声明并没有申请对象空间(变量空间)。
- extern 可以声明,而不进行定义。变量可以被声明很多次,但只能被定义一次。不能再函数体中对 extern 声明的变量进行修改,extern 声明的变量只能是外部变量。
- 函数不需要使用extern即可实现声明和定义分离。
- 多次声明必须兼容,类型一致。
1 | extern int i;//声明,但没有申请对象空间。 |
变量的定义和初始化
变量定义的时候,编译器会分配内存空间。并执行初始化函数。
- 默认初始化:变量没有被显示初始化。
- 值初始化:()
- 直接初始化:使用(val)进行初始化。
- 拷贝初始化:使用=进行初始化
- 列表初始化:使用{}进行初始化。
1 | int d;//默认初始化 |
初始化相关的内容参考初始化的方法。
初始化和赋值是两个不同点操作。使用等号能够表示赋值,也能够实现初始化。
C++是静态类型语言。在编译阶段,进行类型检查。
4 标识符与关键字。

5 作用域
作用域定义
- 全局作用域:名字在所有花括号之外。
- 块作用域:名字在其他作用域内。
- 函数体作用域
- 类作用域
- 普通块作用域
作用域作用
- 内层作用域,外层作用域。
- 控制名称的可见性,防止出现明明冲突。
- 在进行符号查找的时候先查找内部作用域,再查找外层作用域。直到发现符号。
6 C++中有两种类型的表达式
左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!









