C++变量的各种属性
date: 2020-12-21 08:00:01
summary: C++细节——变量的各种属性(重要)
变量的各种属性
一、C++修饰符类别
unsigned和signed
C++允许在char,int ,double数据类型前放置“修饰符”,修饰符用于改变基本类型的含义,所以它更能满足各种情形的需求。
数据类型修饰符 | 说明 |
---|---|
signed | 可用于“整型”,“字符型”,还可作为long和short的前缀 |
unsigned | 可用于“整型”,“字符型”,还可作为long和short的前缀 |
long | 可用于“整型”,“双精度型” |
short | 可用于“整型” |
二、C++中的类型限定符
类型限定符:类型限定符提供了变量的额外信息
(1)const关键字
const类型的对象在程序执行期间不能被修改改变!
const,常数
(2)volatile关键字
该修饰符会告诉编译器不需要优化,volatile声明的变量,让程序可以直接从内存中读取变量。对于,一般的变量,编译器叫对变量进行优化,将内存中的变量暂放寄存器中以加快读写效率。
(3)restrict关键字
由其修饰的指针是唯一一种访问它所指向的对象的方式。
只有C99增加了新的类型限定符——restrict
三、C++存储类别
C++存储类别:定义了C++程序中变量/函数的范围(可见性)和生命周期
(1)static关键字
static存储类
修饰 | 说明 | 作用域 |
---|---|---|
修饰“局部变量” | 离开函数,值仍然保留,指示编译器在程序的生命周期内保持局部变量的存在 | 作用域,本来仅仅是局部,那肯定在本文件 |
修饰“全局变量” | 本来,一般的全局变量作用域可以到某个整个命名空间,但使用static,会使变量的作用域限制,在声明它的文件内(工程编码,常见技巧) | |
修饰“类数据成员”上 | 会导致仅有一个该成员的副本被类的所有对象共享 |
(2)extern关键字
extern存储类:
用于提供1个全局变量的引用,全局变量对所有的文件都是可见的。(什么鬼???)
使用:
- 当你有多个文件并且定义了1个可以在其他文件中使用的“全局变量式”或“函数”时,可以在其他文件中使用extern来得到已经定义的变量或函数的引用。
- 可以这么理解,extern是用来在另一个文件中“声明”一个全局变量或函数的。(重要理解)
//main.c #include<stdio.h> int a=3;//全局变量 int main() { return 0; }
#include<stdio.h> extern int a;//扩展过来!!! int main() [ return 0; ]
(3)mutable关键字
mutable,adj.易变的
mutable存储类:
仅仅使用于类的对象!!!(易错点)
它允许对象的成员替代常量,也就是说,mutable成员可以通过const成员函数修改。
(4)thread_local关键字
thread_local存储类
使用它
thread_local int x; //命名空间