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++标准程序库笔记(1)
- C++的构造函数浅析
- Section 1.4-ariprog
- section 1.4 milk3
- C语言宏定义##连接符和#符的使用
- 初试C++文件流
- 我们学不会的C语言的最大敌人是谁?
- 红黑树
- c++栈
- c++双链表
- C++ Primer引子
- C++编程基础笔记章节一
- C++学习笔记——标准库类型vector(1)
- c++/c的文件读入和字符串读入总结
- Geekband C++面向对象高级编程(上) 第一周笔记 暗影行者
- 多种方法解决同一个问题(一)-----乘法口诀表
- c++的基本语言知识(三)
- c++的基本语言知识(四 )
- 用C/C++解决一些数学问题(一)