C++11在函数中引入了返回类型的箭头符号(不知道名称):
template <typename T>
auto fun(T&& a) -> decltype(bar(a)){ ... }但scott认为,使用auto作为返回类型本身将删除所有const和引用限定符(因为它遵循与模板演绎相同的模式),因此惯用的方法是执行decltype(auto),将所有限定符保持在类型的顶部。
但是,在这种情况下,auto是否被推断为decltype(bar(a))?那么decltype(auto)会是decltype(decltype(bar(a)))吗?这是多余的吗?
发布于 2018-07-31 17:58:23
当您有一个尾随返回类型时,auto关键字显示为一个符号元素。返回类型成为->之后的任何类型。不执行类型扣减。这只是编写带有尾部返回类型的函数声明的方式。只有在没有尾随返回类型时才会发生自动返回类型的扣减,即auto用作占位符返回类型,函数声明器的末尾没有-> …。
发布于 2018-08-01 00:59:14
假设int& bar(); (或使用尾部返回类型语法auto bar() -> int&;),
您可以声明几个功能:
int& f1();或auto f1() -> int&;.decltype(bar()) f2();或auto f2() -> decltype(bar());.(返回类型为int&)。decltype允许使用SFINAE作为模板函数。decltype(auto) f3() { return bar(); }的定义需要(推导为int&) (无SFINAE)。auto f4() { return bar(); }的定义需要(推导为int) (无SFINAE)。decltype(expression)是类型的,而decltype(type)是无效的,所以decltype(decltype(expression))也是无效的。
https://stackoverflow.com/questions/51619314
复制相似问题