std::declval 源码分析
背景:
c++标准库中有很多declval 模版, 平时工作需要sfinae的时候,也会经常使用它,现在我就看下其内部实现吧。
std::declval 用例
| C++ |
std::declval() 通过右值引用,创建临时对象, 通过decltype 来判断具体类型。这也是declval与decaltype配合的典型用法,那我门
std::declval 源码
| C++ |
很简单 就几行,_VSTD::__declval<_Tp>(0) 搞清楚这个就搞清楚了具体原理
__declval
| C++ |
看的出来,有2个定义,这里我门可以看到__declval<_Tp>(0) 传的是0,在编译器推导的时候推导成__declval(int),也就是右值引用的这个。
总结:
declval返回对类型T的右值引用,而不引用任何对象。