Rules3:decltype推导

一般情况下不会有令人惊讶的行为:

const int i = 0; // decltype(i) is const int

bool f(const Widget& w); // decltype(w) is const Widget& decltype(f) is bool(const Widget&)

struct Point{

int x, y; // decltype(Point::x) is int

};

Widget w; // decltype(w) is Widget

if (f(w)) ... // decltype(f(w)) is bool

template<typename T> // simplified version of std::vector

class vector {

public:

...

T& operator[](std::size_t index);

...

};

vector<int> v; // decltype(v) is vector<int>

...

if(v[0] == 0) // decltype(v[0]) is int&

在C++11中, decltype 最主要的用处可能就是用来声明一个函数模板,在这个函数模板中返

回值的类型取决于参数的类型

template<typename Container, typename Index> // works, but

auto authAndAccess(Container& c, Index i) // requires

-> decltype(c[i]) // refinements

{

authenticateUser();

return c[i];

}



template<typename Container, typename Index> // C++14;

auto authAndAccess(Container &c, Index i) // not quite

{ // correct

authenticateUser();

return c[i];

} // return type deduced from c[i]

decltype 几乎总是得到一个变量或表达式的类型而不需要任何修改

对于非变量名的类型为 T 的左值表达式, decltype 总是返回 T&

C++14 支持 decltype(auto) ,它的行为就像 auto ,从初始化操作来推导类型,但是它推

导类型时使用 decltype 的规则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值