从品牌网站建设到网络营销策划,从策略到执行的一站式服务
感性认识跟 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元起,快前往官网查看详情吧
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图