C++速学,第三天
修饰符类型
C++允许再char、int和double数据类型前放置修饰符
修饰符类型:
signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。
unsigned:表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。
short:表示变量的范围比 int 更小。short int 可以缩写为 short。
long:表示变量的范围比 int 更大。long int 可以缩写为 long。
long long:表示变量的范围比 long 更大。C++11 中新增的数据类型修饰符。
float:表示单精度浮点数。
double:表示双精度浮点数。
bool:表示布尔类型,只有 true 和 false 两个值。
char:表示字符类型。
wchar_t:表示宽字符类型,可以存储 Unicode 字符。
3.重点记忆
修饰符signed、unsigned、long 和 short 可应用于整型
修饰符signed、unsigned可用于字符型
long可用于双精度型
修饰符可以组合使用
速记符号(不写int)来声明无符号短整数或无符号长整数
类型限定符(与js中const、let、var类似,与ts中static、private、protect类似)
限定符 | 含义 | 与js/ts对比 |
---|---|---|
const | const 定义常量,表示该变量的值不能被修改 | 基本与JavaScript一致 |
volatile | 修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。。 | 无 |
restrict | 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 | 无 |
mutable | 表示类中的成员变量可以在 const 成员函数中被修改。 | 有点类似于ts的成员变量,不过不一致 |
static | 用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。 | 与ts类相关概念中的static修饰符类似 |
register | 用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。 | 无 |
存储类
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前
可用的存储类:
auto:
(1)C++98:用于自动变量的声明(C++17已删除)
(2)C++11:声明变量时根据初始化值自动推断类型;声明函数时,返回函数的占位符
register:
(1)用于定义存储在寄存器中,而不是RAM的局部变量
(2)变量最大尺寸要等于寄存器尺寸
(3)不能使用一元运算符&
(4)仅代表可能存储在寄存器中,不是绝对
static
(1)指示编译器在程序生命周期内保持局部变量的存在
(2)修饰局部变量时,可以在函数调用之间保持局部变量的值
(3)修饰全局变量时,会是变量的作用域限制在他的文件内
(4)当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享
extern:
(1)提供一个全局变量的引用,全局变量对所有文件是可见的
(2)对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置、
(3)实际是用来在另一个文件中声明一个全局变量或函数
mutable:
(1)允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改
thread_local (C++11)
(1)仅可以在它的线程上创建和访问,变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。
(2)thread_local 说明符可以与 static 或 extern 合并
(3)可以将 thread_local 仅应用于数据声明和定义,thread_local 不能用于函数声明或定义。
评论区