进行一个C++的学(03-类型别名、auto和decltype

定义类型别名的两个方式

	// integer 是 int 的同义词,intp 是int* 的同义词
	//using integer = int;
	//using intp = int*;
	typedef int integer, * intp;

	integer i = 1;
	intp p = &i;
	cout << "value of i: " << i << endl;
	cout << "value of p: " << p << endl;
	cout << "value of *p: " << *p << endl;
	/*
	value of i: 1
	value of p: 00FFFA7C
	value of *p: 1
	*/

如果类型别名指代的是复合类型,不能将类型别名替换成本来的名字去理解,比如指针的类型别名:

	using charp = char*;
	const char a = 'a';
	const charp p = &a;  // 不可以,这里的const是对char*的修饰,p是一个常量指针
	const char* p1 = &a; // 可以,p1是一个指向字符常量的指针

auto类型说明符

  • auto能让编译器替我们去分析表达式所属的类型。
  • auto让编译器通过初始值来推算变量的类型,auto定义的变量必须有初始值。
  • auto能在一条语句中声明多个变量,该语句中所有变量的初始基本数据类型必须都一样。
	int i = 0;
	const int j = 1;
	auto& ir = i, & jr = j; // 不可以,j是整型常量
  • auto会忽略顶层const,保留底层const
	const int i = 0;
	const int& ir = i;

	auto j = i;		// j是一个整型常量
	auto& jr = ir;
	jr = i;			// 不可以,ir的底层const被保留了下来,jr是一个对整型常量的引用

decltype类型指示符

decltype选择并返回操作数的数据类型,在此过程中,编译期分析表达式并得到它的类型,却不实际计算表达式的值。

如果decltype使用的表达式是一个变量,则返回变量的类型(包括顶层const以及引用

如果表达式内容是解引操作,则decltype将得到解引类型。

	int i = 0;
	int j = 1;

	int* ip = &i;
	// ip 是指向j的指针
	decltype(ip) ip1 = &j;
	// ir 是j的引用
	decltype(*ip) ir = j;
	ir++;
	cout << "value of j: " << j << endl;
	cout << "value of ir: " << ir << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值