据我所知,C++核心语言目前没有提供通用功能来确定函数内部的返回值类型,例如:
auto f(std::uint8_t value)
{
double result {0.0};
// ...
auto&& tmp = static_cast<decltype(return)>(value);
// ...
return result;
}为什么像decltype(return)这样的功能还不存在?是否有理由希望将其添加到核心语言中?
发布于 2020-11-18 06:25:21
您返回的是result,因此auto将推导出的类型(在编译时)是result的类型。
正如评论中所建议的,auto推导出的类型通常与decltype(result)推导出的类型不同,因为它们的行为不同:auto使用template type deducion,而decltype使用this。因此,它们可以在推导的类型的参考性上有所不同,这可能是非常重要的。
然而,在您的示例中,由于result是一个没有括号的id表达式,因此decltype(result)将只推导出double,返回的auto也将推导出同样的结果,所以这可能是可以的。你决定吧。
auto f(std::uint8_t value)
{
double result {0.0};
// lots of code ..
auto&& tmp = static_cast<decltype(result)>(value);
// lots of code ...
return result;
}一旦程序编译完成,f 的返回类型就是 result的类型,这是不能改变的,因此不需要语法支持decltype(return)。
重点是,无论您考虑的情况有多复杂,一旦您能够编译程序,这意味着编译器能够确定它需要的所有类型。人类可能很难找出返回类型是什么(老实说,还有许多其他模板的东西),但对于编译器来说却不是。或者,更好的是,编译器推断类型既不难也不容易:它要么这样做(然后您就可以运行程序),要么不这样做(并且它在编译时失败)。
发布于 2020-11-18 06:30:44
https://stackoverflow.com/questions/64884200
复制相似问题