04 std::decltype

decltype

decltype ( 实体 )
decltype ( 表达式 )
若实参是其他类型为 T 的任何表达式,且
a) 若 表达式 的值类别为亡值,则 decltype 产生 T&&;
b) 若 表达式 的值类别为左值,则 decltype 产生 T&;
c) 若 表达式 的值类别为纯右值,则 decltype 产生 T。

int a;
double d;
float f;

decltype(a) aa;
cout << typeid(aa).name() << endl; //int
decltype(d) dd;
cout << typeid(dd).name() << endl;//double
decltype(f) ff;
cout << typeid(ff).name() << endl;//float
1.0 返回类型依赖于模板形参
template<typename T, typename U>
// 返回类型依赖于模板形参
auto add(T t, U u) -> decltype(t + u){
    return t+u;
}
1.1 可以用于抽象基类
struct A {
    virtual int value() = 0;
};

decltype(std::declval<A>().value()) a;  // => int a
cout << typeid(a).name() << endl;
1.2 标准库中有些类型都是通过decltype来定义的
typedef decltype(nullptr) nullptr_t;
typedef decltype(sizeof(0)) size_t;
1.3 取它迭代器的首位置
typename T::iterator it;
typename T::const_iterator it;
decltype  (T.begin() ) it;

void func(T t)
{
    it = t.begin();
}
posted @   osbreak  阅读(1592)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示