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;
decltype(d) dd;
cout << typeid(dd).name() << endl;
decltype(f) ff;
cout << typeid(ff).name() << endl;
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;
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();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了