您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记之变量类型

2016-09-12 21:00 260 查看

变量

在C++中变量相当于一段内存的别名,在编译阶段变量会被编译器映射成内存,全局变量和静态变量会映射到可执行文件的data和bss段,局部变量则会映射成程序栈中的一部分,还有就是动态分配内存的变量,不过动态内存的变量也相当于栈,只是需要显式释放,关于动态内存的申请和释放,以后再说。

在c++中,要使用一个变量,首先要声明一个变量,声明需要指明变量的类型,变量类型的好处是根据不同类型的变量可以确定分配空间的大小,和编译成相关的变量处理的指令。变量声明后,需要对变量初始化,使用没有初始化的变量是很危险的,好的编程习惯一般会在使用之前初始化。初始化分为在变量声明时初始化和默认初始化。

显示初始化:可以给变量初始化为一个值,使用=号,或者使用初始化列表{}(C++11标准),初始化列表有一个好处是,如果存在信息丢失的风险,编译器会报错,例如将一个float变量赋值给一个int变量,则编译器会报错。

默认初始化:默认初始化是全局或者静态变量如果没有显式初始化,则编译器会初始化为零。

基本类型

整型

C++中的整型变量基本类型有:bool,char,short,int,long,long long,wchar_t,char16_t,char_32_t。后面三个用于扩展字符集,对于整型变量大小为bool<=char<=short<=int<=long<=long long。其中int大小一般为4字节。其他大小根据编译器不同可能有所变化,在vs2013中输出为:



整型变量分为有符号和无符号两种类型(除bool),有符号和无符号类型之间的转换知识改变了类型,并没有改变内存中的二进制数值,所以一个有符号的负数转换为无符号的数会变成一个非常大的数值(第一位为1).

浮点型

浮点型变量的基本类型有:float(4个字节),double(8个字节),long double(8个字节),浮点数没有符号区别,但是浮点数有精度问题,一般比较两个浮点数是否相等,不会直接使用==,而是使用abs(a,b)<0.0001,类似这样的比较。

复合类型

引用

引用是一个变量的别名,是同一块内存的不同的名字,就想一个人的书名和小名一样,但是不能定义引用的引用,也不能对字面值常量进行引用。

指针

指针是保存变量地址的变量,大小与计算机的地址位数有关,32位机一般为4个字节。指针有类型,但是类型是可以强制转变的。

const

在C++中const关键字表示常量,与C语言中的const是有一定区别的,C语言中的const变量是有相应的内存的,而c++中的const不一定有相应的内存,相当于有类型的字面值常量,与#define的区别是,const是有类型的,可以进行类型检查,#define没有类型检查,所以在c++中使用常量最好不要用#define而要用有类型检查的const。

const指针分为顶层const和底层const,顶层const表示指针本身是常量,底层const表示指针指向的对象是常量。

constexpr

constexpr表示能够在编译后就能确定值的表达式.

如constexpr int m=20;

constexpr int sz=size();其中size()定义为:int size(){ return 12;}

constexpr int *p=nullptr;

auto

auto关键字是根据表达式的类型自动推到类型,例如int a=0;auto b=a;那么b就为int型变量。

decltype

类似于auto,根据表达式的值返回类型,如int a=0;decltype(a+0) b;则b为int型。

using关键字可以指定变量类型,类似于c中的typedef,下面的式子是等价的。

using I=int;

typedef int I;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++语言