C++ primer复合类型


主要包括两种:引用和指针。

引用

为对象起来另外的名字,对象没变
可跟着绑定的对象一起变化
注:
1.引用必须被初始化
2.初始值必须是对象,不能是字面值或者表达式结果

int ival = 1024;
int &refVal = ival;  //refVal引用了ival ,是ival的另一个名字
int &refVal; //报错 必须初始化
int &refVal = 10; //报错 引用的初始值必须是对象

指针

指向对象的地址,也可实现对其他对象的间接访问。
区别:指针本身是对象,可赋值拷贝;指针定义时无需初值;
定义指针类型: int *p;

解引用符:*
解引用需要对有效指针使用。

不能把变量赋值给指针

符号去歧义:

注:声明阶段:基本数据类型 + 声明符 = int num;
下表的前置程序段:

int ival = 1024;
int *pout =&ival;
符号\位置 声明阶段-基本数据类型 其他部分
* 定义指针类型: int *p; 解引用:count << *pout; (解了指针pout的引用,输出1024)
& 定义引用类型:int &refVal = ival; 获取对象的地址:int *p = &ival;

指向指针的指针

int ival = 1024;
init *pi = &ival;
int **ppi = &pi;

解引用同样要两次。

处理类型 C++11

auto类型说明符

应用场景:定义的时候不知道声明变量的表达式是啥基本类型
auto让编译器替我们分析表达式所属的类型

auto item = v1+ v2;

decltype类型指示符

应用场景: 希望从表达式推断出要定义的变量类型,但是不想用表达式的值来做变量的初始值。
decltype只是返回操作数的数据类型,编译器只是返回类型,不计算实际值。

int i=5;
decltype(i+6) b;

for循环新写法 : 基于范围的for语句

for (declaration:expression)
	statement

expression 序列对象 declaration访问序列中的基础元素。
每次迭代,declaration部分的变量会被初始化为expression部分下一个变量值
结合string:

string str("some string");
for (auto c : str)
	cout << c << endl; //每行一个输出str中的字符

Vscode C++11编译支持

打开项目的tasks.json文件(在项目根目录下,可能隐藏)
在args中加入“-std=c++11”
如下图示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bluehatihati/article/details/112979630
今日推荐