C++复习笔记 – 变量和基本类型
变量和基本类型
-
变量声明和定义
第一,声明的作用是告诉编译器关于变量名称/变量类型/变量大小/汉书名称/结构名称/大小等信息,而且在声明阶段不会给变量分配内存。定义性声明:如int a;分配内存,引用性声明:如extern int a;不分配内存。
定义:在变量声明后,给它分配内存。一般声明和定义放在一起。
第二,声明可以有多次,而定义只能有一次。
-
变量作用域
一般来说,有3个地方可以定义变量:第一,函数或代码块内部声明变量,局部变量;第二,在函数参数定义中声明的变量,形式参数;第三,在函数外声明的变量,全局变量。
局部变量:只能被函数内部或者代码块内的语句使用,作用于就是这个函数;
全局变量:在函数外定义的,在程序的整个声明周期内都有效。
-
引用和指针
引用:变量的别称。
不存在空引用,用用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象,指针可以在任何时候指向另一个对象。
引用必须在创建时被初始化,指针可以在任何时间被初始化。
指针:保存变量地址的变量。
-
复合类型
数组
字符串
结构体
共用体
union idcard { string id1; int id2; } //节省空间,常用于操作系统数据结构和硬件数据结构
枚举
指针
引用
-
const限定符
指针:
const int * p
或者int const * p
是常量指针(指向常量的指针),对象的值不可变,指针可以更换指向的对象。int * const p
是指针常量,指针内所存的地址不可变,指向的对象的值可以改变。 -
auto类型说明符
自动类型推断(尤其是模板类型出现,表达式的返回类型变得复杂)。(decltype)
第一,变量声明时根据初始表达式自动推断该变量的类型;(迭代器/模板函数)
第二,在声明函数时作为函数返回值的占位符。(常常与decltype配合使用)
template<class T, class U> auto add(T t, U u) -> decltype(t + u) { return t + u; }
note:使用auto关键字的变量必须初始化
函数参数和模板参数不能被声明为auto
使用auto关键字声明表达式时,不能自动推导顶层引用和const,除非显式声明
int i = 10; int & r = i; auto a = r; a = 13; //i=10, a=13 //显式声明 auto & b = r; b = 15; // i=15, b=15
const int c1 = 10; auto c2 = c1; c1 = 11; //error c2 = 14; //ok,type of c2 : int //显式声明 const auto c3 = c1; c3 = 15;//error,type of c3 : const int
-
decltype类型指示符
从表达式的类型推断出要定义的变量类型,但是不用该表达式的值初始化变量(auto完成这项工作),decltype返回操作数的数据类型,编译器分析表达式并得到它的类型,不计算表达式的值。
-
自定义数据结构
struct <类名> {<类体>};
struct Book_info { string book_id; float price; }; Book_info book1, book2; //通常将类定义和对象的定义分开