感性认识跟 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的用法粗解-创新互联
链接地址:https://www.cdcxhl.com/article46/egheg.html
成都网站建设公司_创新互联,为您提供虚拟主机、关键词优化、网站维护、电子商务、营销型网站建设、微信小程序
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联