C++中的auto类型说明符用法

用法介绍

//C++11引入auto类型说明符,可以让编译器替我们分析表达式所属的类型
//auto让编译器通过初始值推算变量的类型,因此auto定义的变量必须有初始值
#include 
int main()
{
	int val1 = 9;
	double val2 = 4.1;
	auto item = val1 + val2;//这里item是double类型

	//一条语句中可以声明多个变量但是只能有一个基本数据类型
	auto i = 0, *p = &i;//正确,i是整数,p是整型指针
	auto sz = 0, pi = 3.1;//错误,sz和pi类型不一致

	//引用被用作auto的初始化
	//编译器以引用对象的类型作为auto类型
	int i = 0, &r = i;
	auto a = r;//a是int类型
	//还可以将引用的类型设为auto
	auto &g = i;//g是一个整型引用,绑定到i
	auto &h = 42;//错误,不能为非常量引用绑定字面值
	const auto &j = 42;//正确

	//auto一般会忽略顶层const保存底层const
	const int ci = i, &cr = ci;
	auto b = ci;//b是一个整数,ci的顶层const特性被忽略
	auto c = cr;//c是一个整数,cr是ci的别名,等价于上一句
	auto d = &i;//d 是一个整型指针
	auto e = &ci;//e是一个指向整数常量的指针,对常量对象取地址是一种底层const
	//明确希望推断出的auto类型是一个顶层const
	const auto f = ci;//推断出的auto是int, f是const int

	//切记,符号&和*只从属于某个声明符而非基本数据类型的一部分,初始值必须是同一种类型
	auto k = ci, &i = i;//k是整数,l是整数引用
	auto &m = ci, *p = &ci;//m是对整型常量的引用,p是指向整型常量的指针
	auto &n = i, *p2 = &ci;//错误,i的类型是int,而&ci的类型是const int

	
	
}

练习

//判断下列语句的执行结果并输出赋值前后变量的内容验证
#include
int main()
{
	int i = 0, &r = i;
	const int ci = i, &cr = ci;

	auto a = r;//0 int
	auto b = ci;//0 int
	auto c = cr;//0 int
	auto d = &i;//i的地址 int*
	auto e = &ci;//ci的地址 int*
	auto &g = i;//0 int

	std::cout << "a = " << a << std::endl;
	std::cout << "b = " << b << std::endl;
	std::cout << "c = " << c << std::endl;
	std::cout << "d = " << d << std::endl;
	std::cout << "e = " << e << std::endl;
	std::cout << "g = " << g << std::endl;
		/*a = 0
		b = 0
		c = 0
		d = 00CFFA18
		e = 00CFFA00
		g = 0*/

	a = 42;
	b = 42;
	c = 42;
	//d = 42;
	//e = 42;
	g = 42;

	std::cout << "a = " << a << std::endl;
	std::cout << "b = " << b << std::endl;
	std::cout << "c = " << c << std::endl;
	std::cout << "d = " << d << std::endl;
	std::cout << "e = " << e << std::endl;
	std::cout << "g = " << g << std::endl;
		/*a = 42
		b = 42
		c = 42
		d = 014FF780
		e = 014FF768
		g = 42*/
}

你可能感兴趣的:(C++)