decltype和返回类型后置

2023-02-06  本文已影响0人  艰默

文章首发公众号:iDoitnow

1. decltype

decltype的使用方式如下:

decltype(expression) var;

关键字decltype的作用是将变量的类型声明为表达式指定的类型。即将var的类型声明为expression指定的类型。编译器在处理decltype的时候,实际上需要对expression进行一个核对,然后才能确定var的类型。其流程和核对规则大致如下:

2. 返回类型后置

C++11新增加了一种函数声明的语法:在函数名和参数后面指定返回类型。该语法与auto搭配使用,其使用形式如下所示:

auto fun(int a, int b) -> int

该语法主要是为了解决某些模板函数返回值类型问题,例如下面这个模板函数:

template<typename T, typename U>
??? fun(T t, U u)
{
    ...
    return t + u;
}

该模板函数的返回值如何确定呢?首先很容易想到的是将decltype(t+u)设置为该模板函数的返回值,但是不行的是,此时还未声明xy,编译器还识别不到他们,更无法使用他们,因此,C++11新增了返回值类型后置的这种语法,针对上述的模板函数,使用新增的语法可以写为:

template<typename T, typename U>
auto fun(T t, U u) -> decltype(t + u) //此时decltype在参数t和u声明的后面,可以正常使用他们
{
    ...
    return t+u;
}

参考文献

C++ Primer Plus(第六版) - 第18章 探讨C++新标准

上一篇 下一篇

猜你喜欢

热点阅读