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;    //命名空间