c++:自动获取数据类型,auto与decltype的异同

//decltype、auto 自动推理数据类型
//auto  无法区分是否是引用  是否是常量还是变量
//decltype 基本数据类型是一定可以区分的,可以获取常量属性   可是识别引用
//typeid只能获取基本数据类型  不能获取引用以及常量
auto main()->int
{
	const vector<int>myint{ 1, 2, 3, 4, 5, 7, 8 };
	//myint[0] = 1223;//error  常量,不允许被修改

	auto inta = myint[0];
	cout << typeid(inta).name() << endl;//auto获取数据的类型  无法获取数据的属性

	decltype(myint[0]) intd = 1;//根据myint推理出intd的类型
	cout << typeid(myint).name() << endl;
	cout << typeid(intd).name() << endl;
	cout << typeid(myint[0]).name() << endl;

	inta = 88;
	const double db(10.8);
	const double &rdb(db);
	cout << typeid(inta).name() << endl;
	cout << typeid(db).name() << endl;
	cout << typeid(rdb).name() << endl;

	struct mys//结构体
	{
		decltype(rdb) r1;//如果是引用将占4字节   否则占8字节
		//auto inta = myint[0];//auto不能在结构体内部
	};
	cout << sizeof(mys) << endl;
	cin.get();
	return 0;
}



//auto	  无法区分是否是引用  是否是常量还是变量
void main2()
{
	int a = 10;
	int &ra(a);
	auto i1 = 30;
	auto i2 = a;//无法区分 i1 i2是否是常量还是变量
	auto i3 = ra;
	cout << typeid(i1).name() << endl;
	cout << typeid(i2).name() << endl;

	cout << typeid(i3).name() << endl;
	cin.get();
}


//decltype可获取常量属性以及引用属性 	  无法区分是否是引用  是否是常量还是变量
void main3()
{
	int a = 10;
	int &ra(a);
	decltype(a) i1 = 123;
	decltype(12.4) i2 = a;//double
	decltype(ra) i3 = ra;
	decltype(12.4l) i4 = a;//long double
	decltype(12.4f) i5 = a;//float
	decltype(12l) i6 = a;//long

	cout << typeid(i1).name() << endl;
	cout << typeid(i2).name() << endl;
	cout << typeid(i3).name() << endl;
	cout << typeid(ra).name() << endl;
	cout << typeid(i4).name() << endl;
	cout << typeid(i5).name() << endl;
	cout << typeid(i6).name() << endl;
	cin.get();
}




auto main()->int
{
	const double db = 12.0;
	const double &rdb(db);
	struct mystruct 
	{
		//auto a;//error  结构体中不能使用auto
	};
	auto dbx = rdb;
	dbx = 99.88;
	cout << db << endl;//auto、typeid  无法区别常量、变量以及引用
	cout << dbx << endl;
	cin.get();
	return 0;
}

更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值