auto与decltype两种数据类型区别与联系

auto与decltype区别:

  1. auto类型说明符用编译器计算变量的初始值来推算其类型,decltype虽然也让编译器分析表达式得到它的类型,但是并不计算表达式的值。
  2. 编译器推算出来的auto类型有时候和初始值的类型并不完全一样,编译器会适当改变结果类型使其更符合初始化规则。比如,auto一般会忽略顶层const,而把底层const保留下来。decltype会把顶层const保留下来。
  3. decltype使用一个不加括号的变量,得到的结果就是该变量的类型,如果加上一层或多层括号,则编译器将腿短得到引用类型。

例子:

#include <iostream>
#include <typeinfo>

int main()
{
	int a = 3;
	auto c1 = 1;		  //int
	decltype(a) c2 = a;   //int
	decltype((a)) c3 = a; // int &

	const int d = 5;
	auto f1 = d;		  //int
	decltype(d) f2 = d;   //const int

	std::cout << typeid(c1).name() << std::endl;
	std::cout << typeid(c2).name() << std::endl;
	std::cout << typeid(c3).name() << std::endl;
	std::cout << typeid(f1).name() << std::endl;
	std::cout << typeid(f2).name() << std::endl;

	c1++;
	c2++;
	c3++;
	f1++;

	//f2++; // f2是const int 类型,不能改变其值
	std::cout << a << " " << c2 << " " << c2 << " " << \
		c3 << " " << f1 << " " << f2 << std::endl;

	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值