详解C++14中返回类型推导的使用.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

详解C++14中返回类型推导的使用

使用C++14中的auto返回类型,编译器将尝试自动推导(deduce)返回类型:

namespace{

intxx=1;

autof(){returnxx;}//returntypeisint

constautof3(){returnxx;}//returntypeisconstint

automultiply(inta,intb){return(a*b);}

autoincrease(inta){a++;returna;}

}//namespace

inttest_auto_14_1()

inta=4,b=5;

autov1=multiply(a,b);

std::coutv1:v1\n;//v1:20

autov2=increase(a);

std::coutv2:v2\n;//v2:5

v2=10;

std::couta:a\n;//a:10

return0;

}

在C++14中使用lambda,可以使用auto推导其返回类型,这使得返回推导引用或右值引用成为可能:

namespace{

templatetypenameT

autof2(Tt){returnt;}

}//namespace

inttest_auto_14_2()

//returnsareferencetoadeducedtype

autog=[](autox)-auto{returnf2(x);};

inty=123;

intz=g(y);//referencetoy

std::coutz:z\n;//z:123

z=456;

std::couty:y\n;//y:456

return0;

}

decltype(auto)类型说明符(type-specifier)也像auto一样推导出一个类型。但是,它会在保留其引用和cv限定符(cv-qualifier)的同时推导返回类型,而auto则不会:

namespace{

decltype(auto)increase(inta){a++;returna;}

intxxx=123;

autof(constinti){returni;}//returntypeisint

static_assert(std::is_sameconstint,decltype(f(xxx))::value==0);

static_assert(std::is_sameint,decltype(f(xxx))::value==1);

decltype(auto)g(constinti){returni;}//returntypeisconstint

static_assert(std::is_sameconstint,decltype(g(xxx))::value==1);

intxx=1;

decltype(auto)f2(){returnxx;}//returntypeisint,sameasdecltype(x)

static_assert(std::is_sameint,decltype(f2())::value==1);

decltype(auto)f3(){return(xx);}//returntypeisint,sameasdecltype((x))

static_assert(std::is_sameint,decltype(f3())::value==1);

//constdecltype(auto)f4(constint){returnxx;}//constdecltype(auto)isanerror,decltype(auto)mustbeusedonitsown

//error:“decltype(auto)”不能与任何其他类型说明符组合

//autof5(boolflag){

//if(flag)return1;

//elsereturn1.0;//error:所有返回表达式必须推导为相同类型:以前为“int”

//class

文档评论(0)

182****6697 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档