item 3: 理解decltype

本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误。谢谢!

博客已经迁移到这里啦

decltype是一个奇怪的东西。给出一个名字或者一个表达式,decltype可以告诉你名字或表达式的类型。大多情况下,他告诉你的就是确实你想的那样。但是偶尔,他会提供一个脱离你想象的结果,这导致了你必须去找一本参考书或者去在线Q&A网站寻求答案。

我们从一般情况(没有意外的结果)开始。对比template和auto的类型推导,decltype模仿你给的名字或表达式:

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

bool f(cosnt Widget& w); //decltype(w)是const Widget&
//decltype(f)是bool(const Widget&)

struct Point {
int x, y; //decltype(Point::x)是int
}; //decltype(Point::y)是int

Widget w; //decltype(w)是Widget

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

template

posted @ 2015-11-13 12:11  boydfd  阅读(2047)  评论(2)    收藏  举报