decltype关键字
decltype可以在编译期推导出一个变量或表达式的结果类型(但不会真正计算表达式的值),并且使用这个结果定义新的变量。
追踪返回类型
先看一个错误的案例:代码想推导出返回值(t + u)类型,为什么编译错误?
答:因为编译器是从左向右读入符号,此时t/u并没有读入,因此不能推导t+u的类型
template<typename R, typename T, typename U>
decltype(t + u) add(T t, U u)
{
return t + u;
}
解决方案:使用auto + decltype,实现 返回类型后置/追踪返回类型
返回类型后置(又称为追踪返回类型)的语法格式
①函数指针的等价:如,auto (*fp)() -> int 与int (*fp)()的等价;
②函数引用的等价:如,auto (&fr)() -> int 与 int (&fr)()的等价
template<typename R, typename T, typename U>
auto add(T t, U u) -> decltype(t + u) //返回类型后置
{
return t + u;
}
————————————————
版权声明:本文为CSDN博主「粪逗er」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36750623/article/details/84848739