分析 vs2019 c++ 中的 decltype 与 declval (2)

(1) decltype 可以让推断其参数的类型。按住 ctrl 点击 decltype ,会发现无法查阅 其定义 :

在这里插入图片描述

(2) 但 STL 库里咱们可以查阅函数 declval 的 定义,很短,摘抄如下:

template <class _Ty, class = void>  // add reference (non-referenceable type)
struct _Add_reference
{ 
    using _Lvalue = _Ty;
    using _Rvalue = _Ty;
};

/*
template <class... _Types>
using void_t = void;
*/
template <class _Ty>
struct _Add_reference<_Ty, void_t<_Ty&>>   // (referenceable type)
{ 
    using _Lvalue = _Ty&;
    using _Rvalue = _Ty&&;
};

template <class _Ty>
using add_rvalue_reference_t = typename _Add_reference<_Ty>::_Rvalue;

template <class _Ty>
add_rvalue_reference_t<_Ty> declval() noexcept;

可见,能总结出 : declval 函数返回了对其模板参数的右值引用。当不能为模板参数的对象添加引用,则返回模板参数本身。

(3) 结合 std::declval 的定义,比较好掌握使用其的语法。然后用例子测试一下其用法:

在这里插入图片描述

再修改下函数 f ,再测试一个有函数返回值的例子:

在这里插入图片描述

(4)还有本系列,本目录的另一篇文章,给个链接: declval()

(5)

谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值