decltype

decltype (declare type)

decltype 相当于 typeof。

可以用来申明一个返回类型

template<typename T1, typename T2>
decltype(x+y) add(T1 x, T2 y);

使用 decltype 可以使得编译器找到表达式的类型。

可以用于 lambda 表达式

auto cmp = [] (const Person& p1, const Person& p2) {
    return p1.lastname() < p2.lastname() ||
       (p1.lastname() == p2.lastname() &&
           p1.firstname() < p2.firstname());
}

···
std::set<Person, decltype(cmp)> coll(cmp);

面对 lambda,我们手上往往只有 object,没有 type,要获得其 type 就得借助于 decltype

posted @ 2020-11-20 15:28  Codroc  阅读(301)  评论(0编辑  收藏  举报