01类型推导 Scott Meyers的effective modern c++讲座摘要

Scott Meyers - Effective Modern C++ part 1
https://www.youtube.com/watch?v=fhM24zs1MFA

762041-20190327132917202-661626562.png

decltype(declared type)的类型推导:

  • 不会忽略const/volatile/reference。
  • decltype(左值表达式) => T&, 但是如果是decltype(名字) => T, 名字优先,如:
    int x
    decltype(x)  => T           // x是左值表达式,但是名字优先
    decltype((x)) => T&       // (x)也是左值表达式,但不是名字

函数返回类型的推导:

auto foo() // 按照模板方式来推导
decltype(auto) foo // 按照decltype方式来推导

但是创建函数时到底怎么用呢?简单地说,不需要修改内部数据,则使用auto, 否则使用decltype(auto)
auto lookupValue(context info)
{
  int index = 通过info计算出index;
  return myIntVector[index];
}
//上面这个函数通过info查找vecotr<int>中的一个值,使用auto返回的就是int,不需要修改vector中的内容,lookupValue(info) = 0就不允许。

decltype(auto) authorizeAndIndex(vecotr<int>& v, int index),
{
  authorizeUser();
  return v[index];
}
上面这个函数在访问数据之前先验证用户,这时返回的就是int&, 可以处理vector中的内容,authorizeAndIdnex(v, 0) = 0这样写是允许的。

最后, decltype(auto)返回类型与函数的实现有关,如果返回的是名字,则返回T, 如果返回的是表达式,则返回T&。

转载于:https://www.cnblogs.com/ht1947/p/10606892.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值