C++11decltype的用法粗解-创新互联

1、decltype 是啥子

感性认识跟 auto 一样

创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的十载时间我们累计服务了上千家以及全国政企客户,如纯水机等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致表扬。
auto a = 1;

但 decltype 是这样用

decltype(表达式) a = 值;

// 例如
decltype(1) a = 2;
decltype("ss") str = "123";

auto a = 20;
decltype(a) b = 30;

大概就是根据 decltype() 括号里面表达式推导出相应的类型,至于与 auto 的不同点,先不用去比较它,初认识的时候会混淆,需要用的时候查查就好了。

2、decltype 括号里的推导规则是怎么样子的呢

略......去查吧,我也很头疼。

3、decltype 实际用途

这里举一个常用的例子

这种函数很常见吧,有也就返回 2 个数相加的结果

int add(int a, int b)
{
	return a + b;
}

这时候你可能会想到,我要是用浮点类型的咋办,这时候你会用重载的方式再写一次

double add(double a, double b)
{
	return a + b;
}

好像解决了一点,就是代码量多了一丢丢,后面翻查资料发现,模板也能解决这个问题,而且代码量少一丢丢

templateT add(T a, T b)
{
	return a + b;
}

写完感觉很nice,什么整型浮点型啥的都不是问题。这时候可能有个S(介于A与C之间的)的需求说:我想要整型和浮点型相加的结果;

然后就开始着手写。思绪良久也写出了一个跟上边一样的模板

templateT1 add(T1 a, T2 b)
{
	return a + b;
}

这时候我就懵逼逼了,add 的返回值是到底是 T1 还是 T2 呢。真不知如何下手啊,这个还是简单数据类型,要是复杂一点的数据类型那不就得删库跑路了。

那能不能让编译器自动推导呢,答案是有的,那今天我们的主角就登场了、

templateauto add(T1 a, T2 b)->decltype(a + b)
{
	return a + b;
}

完整代码

#includeusing namespace std;

templateauto add(T1 a, T2 b)->decltype(a + b)
{
	return a + b;
}

int main(int argc, char* argv[])
{
	cout<< add(1, 2.14)<< endl;
	return 0;
}

调试结果:3.14

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:C++11decltype的用法粗解-创新互联
当前地址:http://hbruida.cn/article/egheg.html