首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定函数内部的返回值类型

确定函数内部的返回值类型
EN

Stack Overflow用户
提问于 2020-11-18 06:22:14
回答 2查看 78关注 0票数 0

据我所知,C++核心语言目前没有提供通用功能来确定函数内部的返回值类型,例如:

代码语言:javascript
复制
auto f(std::uint8_t value)
{
    double result {0.0};
    // ...
    auto&& tmp = static_cast<decltype(return)>(value);
    // ...
    return result;
}

为什么像decltype(return)这样的功能还不存在?是否有理由希望将其添加到核心语言中?

EN

回答 2

Stack Overflow用户

发布于 2020-11-18 06:25:21

您返回的是result,因此auto将推导出的类型(在编译时)是result的类型。

正如评论中所建议的,auto推导出的类型通常与decltype(result)推导出的类型不同,因为它们的行为不同:auto使用template type deducion,而decltype使用this。因此,它们可以在推导的类型的参考性上有所不同,这可能是非常重要的。

然而,在您的示例中,由于result是一个没有括号的id表达式,因此decltype(result)将只推导出double,返回的auto也将推导出同样的结果,所以这可能是可以的。你决定吧。

代码语言:javascript
复制
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)

重点是,无论您考虑的情况有多复杂,一旦您能够编译程序,这意味着编译器能够确定它需要的所有类型。人类可能很难找出返回类型是什么(老实说,还有许多其他模板的东西),但对于编译器来说却不是。或者,更好的是,编译器推断类型既不难也不容易:它要么这样做(然后您就可以运行程序),要么不这样做(并且它在编译时失败)。

票数 3
EN

Stack Overflow用户

发布于 2020-11-18 06:30:44

Enrico的answer展示了如何执行所需的操作。

要回答这个问题:

为什么像decltype(return)这样的功能还不存在?

要么是因为没有提出这样的特性,要么是因为这样的提议还没有被语言接受。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64884200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档