decltype(auto) 和 decltype(returning expr) 作为返回类型有什么区别?

2024-03-07

有什么区别decltype(auto) and decltype(returning expression)作为函数(模板)的返回类型如果expr在这两种情况下都没有使用括号吗?

auto f() -> decltype(auto) { return expr; } // 1
auto f() -> decltype(expr) { return expr; } // 2

Above f可以在任何上下文中定义/声明,并且可以是(成员)函数或(成员)函数模板,甚至可以是(通用)lambda。expr可以依赖于任何模板参数。

在第二个版本中expr是完全相同的表达式,没有额外的括号。

在 C++14 及更高版本中使用第一种或第二种形式可以预期哪些差异?

如果到处都使用括号怎么办?


是,有一点不同。第一个将根据函数体中的返回表达式检测返回类型。

第二个也不会将返回类型设置为内部表达式的类型decltype(),但也将适用表达sfinae在上面。这意味着如果 decltype 内的表达式无效,编译器将搜索另一个有效的重载。而第一个版本将是一个硬错误。

举个例子:

template<typename T>
auto fun(T a) -> decltype(a.f()) { return a.f(); }

template<typename T>
auto fun(T a) -> decltype(a.g()) { return a.g(); }

struct SomeType {
    int g() { return 0; }
};

fun(SomeType{});

这会选择正确的过载。现在如果我们替换decltype(expr) by decltype(auto),编译器将无法选择正确的重载,因为没有任何东西在函数签名中这限制了该类型应该能够执行的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

decltype(auto) 和 decltype(returning expr) 作为返回类型有什么区别? 的相关文章

  • ASP.NET MVC:DropDownListFor 未选择任何选项

    我用它来填充 ASP NET MVC 视图中的下拉列表 调试这个我可以看到Selected属性设置为true当它应该是的时候 但是当渲染视图时 列表中的任何选项都不
  • 将自定义信息添加到 CSPROJ 文件

    作为我们开发生命周期的一部分 我们在项目中针对 C 源代码运行了许多流程 这些进程由 GUI 驱动 该 GUI 当前读取 csproj 文件以查找项目中使用的源文件 这很好用 我们现在有一个新要求 即提供一些需要调用 Web 服务的验证过程
  • 如何在 C 中的 for (;;) 循环中声明多个变量?

    我认为可以在一个变量中声明多个变量for loop for int i 0 char ptr bam i lt 10 i 但我刚刚发现这是不可能的 GCC 给出以下错误 错误 char 之前应有不合格的 id 你真的不能在一个变量中声明不同
  • 原子地从 ConcurrentQueue 中获取所有内容

    我有多个线程生成项目并将它们粘贴在一个公共的ConcurrentQueue private ConcurrentQueue
  • linq按顺序插入元素的方法

    我有一个按元素的 Name 属性排序的元素集合 我需要在保持顺序的同时将新元素插入集合中 我正在寻找一种简洁的 LINQ 方法来做到这一点 我的代码如下 this Children 是集合 d 是我需要插入的新元素 需要两次遍历集合才能找到
  • 如何在blob存储中创建文件夹

    我有一个文件 例如Parent zip解压后 它将产生以下文件 child1 jpg child2 txt child3 pdf 跑步时Parent zip通过下面的函数 文件被正确解压到 some container child1 jpg
  • 迭代 C++ 映射中的键

    有没有办法迭代键 而不是 C 映射对 地图是关联容器 因此 迭代器是一对key val 如果您只需要键 则可以忽略该对中的值部分 for std map
  • 在 C++ 中将 unix 时间戳转换为星期几?

    如何根据任意 Unix 时间戳 秒 确定加利福尼亚州的星期几 太平洋时间 我四处搜寻 但没有找到 C 的内置库 UTC 通常比 PT 早 8 小时 但只需从 Unix 时间戳中减去 8 小时并创建一个tmstruct 不起作用 因为这会折扣
  • 如何在WPF中使用Application.Exit事件?

    我需要删除一些特定文件 然后用户关闭 WPF 中的程序 所以我从这里尝试了 MDSN 代码http msdn microsoft com en us library system windows application exit aspx
  • pthread_join() 中的阻塞

    根据手册页 pthread join 函数应暂停调用的执行 线程直到目标线程终止 除非目标线程 已经终止了 因此 据我了解 调用进程将阻塞 直到指定的线程退出 现在考虑以下代码 pthread t thrs NUMTHREADS for i
  • std::线程构造和执行

    我在 中找不到任何信息文档 http en cppreference com w cpp thread thread thread是否能保证线程对象构造完成后线程实际上正在运行 换句话说 是否可以保证线程构造函数完成后线程函数已经被执行 一
  • 如何在字符串中写入反斜杠 (\)?

    我想写这样的东西C Users UserName Documents Tasks in a textbox txtPath Text Environment GetFolderPath Environment SpecialFolder M
  • ASP.NET C# 捕获类中的所有异常

    我知道这不是正确的做法 而且根本不干净 我只是想知道这是否可能 如果我有一个包含很多方法的类 public class Foo methodA methodB methodC 是否可以捕获所有可能发生的异常 而不必在每个方法中编写 try
  • 如何将 textblock.foreground 绑定到变量? (WPF C#)

    所以我希望改变我的程序 以便我可以运行一个函数来检查前景色是否应该是黑色或银色 我希望将不可 访问 的字段灰显 My form currently looks like 我希望将 无需维护 字段 灰显 但我在尝试在数据模板中定义字体前景的绑
  • 使用枚举作为常量表达式。哪个编译器是正确的?

    以下代码使用枚举成员m作为常量表达式 即作为模板参数 该代码可以在 gcc 下编译 但不能在 clang 下编译 现场演示 http coliru stacked crooked com a 79f0d052864fec19 20live
  • 没有 DbSet 的原始 SQL 查询 - Entity Framework Core

    随着 Entity Framework Core 的删除dbData Database SqlQuery
  • 如何从 XBAP 关闭浏览器?

    我正在完全信任地使用 XBAP 应用程序 单击按钮时 我需要关闭托管 XBAP 的浏览器 我怎样才能实现这个目标 Application Currenty ShutDown 仅关闭应用程序 使浏览器保持空白 我知道这是一个非常老的问题 但如
  • 画笔到画笔动画

    我设法找到了如何制作 WPF 动画 两种颜色之间的过渡 它被称为 ColorAnimation 并且效果很好 ColorAnimation animation new ColorAnimation From Colors DarkGreen
  • c 中的帕斯卡三角形与递归函数

    您好 这是我用于计算帕斯卡三角形的代码 但它运行错误 已停止工作 为什么 我认为它的错误在于 paskal 函数 include
  • 如何在 C 中将向量参数传递给 OpenCL 内核?

    我在将向量类型 uint8 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题 在主机中 我将数据存储在数组中 cl uint dataArr 8 1 2 3 4 5 6 7 8 我的真实数据不仅仅是 1 8 这只是为了便于解

随机推荐

  • 我的脚本不会进入下一页进行抓取

    我编写了一个用于网络抓取的代码 除了下一页活动之外 一切都很好 当我运行我的代码时scrape数据只是来自网站scraping第一页不会向前移动以抓取其他页面数据 实际上 我是使用 python 进行网络抓取的新手 所以请指导我 你能修复我
  • 修改Django中间件中的地址

    我不知道是否可行 但我想使用中间件在 URL 末尾添加一些参数 modyf 请求的 URL 后可以不重定向来完成吗 IE 用户点击 some link 中间件将其重写为 some link par1 1 par2 2 其他方法是修改响应并替
  • CSS 负 z-index:这是什么意思?

    如果我向元素的 z index 属性添加负整数值 根据标准 预期效果是什么 我搜索了答案 但只找到了这个 https developer mozilla org en US docs Web CSS z index https develo
  • 我在命令面板中没有看到 hello world 命令

    So the tutorial https code visualstudio com api get started your first extension开发 Visual Studio 代码扩展说要打F5然后是命令面板 我应该在其中
  • Android getColumName 和 getColumnIndex

    我是一名 Android 新手 我的光标有问题 我无法使用以下方式访问数据 cursor get cursor getColumnIndex columnName 我尝试了以下代码来测试是否有错误 while cursor moveToNe
  • 一个模型可以“属于”任一/或多个模型吗?

    抱歉 如果这是一个有点菜鸟的问题 但希望澄清我对此的想法 我有一个模型 它可以属于一个模型 也可以属于另一个模型 例如 假设我有一个团队模型和一个成员模型 这两个模型都可以有一个 BankAccount class Team has man
  • 从 firebase 检索数据返回 NULL

    当我调用listPost 时 它将返回NULL 我想它不会等待侦听器从 firebase 获取帖子 在返回 arrayPost 之前 如何等待从 firebase 获取帖子 public Post listPost ArrayList
  • 用于部署的语言/堆栈[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在进行相当密集的重写 并可以选择以下选项 JSP Java 运行在 Tomcat 上 PHP 运行在 Apache 下 Ruby 我不确定在
  • 为什么Android虚拟设备太慢?

    我刚刚从 android 开发者网站下载了 adt bundle 来尝试一下 当我点击 运行 按钮时 问题就开始了 Android虚拟设备或 avd 速度非常慢 我有一台相当不错的机器 核心 i7 和 16go 内存 他们不知道吗 我的意思
  • 如何防止模板类被多次派生?

    我有以下模板类 template
  • 使用 Pig 中的elephantbird 进行 Json 解析

    我无法在 Pig 中解析以下数据 这是 Twitter API 在获取某个用户的所有推文后返回的内容 源数据 我删除了一些数字 以免无意中侵犯任何人的隐私 created at Sat Nov 01 23 15 45 0000 2014 i
  • Spring第一次请求非常慢

    我在 Spring Boot 中有应用程序 使用嵌入的tomcat初始化Spring Boot后 第一次响应非常慢 我该如何修复它 spring boot 有预热命令 模式吗 我也在考虑与数据库的连接 我想知道连接数据库 可能 spring
  • Winforms:不是有效的 Win32 应用程序

    我使用 VS2012 创建了一个简单的 Windows 窗体应用程序 并尝试将其安装到 XP 计算机上 不幸的是我收到以下错误消息 setup exe 不是有效的 Win32 应用程序 不可否认 我确实使用了 net 4 5 框架 这在 X
  • 使用 Jetpack Compose 上的 Spacer 填充剩余空间

    我想我可能会遗漏一些东西 有没有办法在 Compose Beta01 中实现 填充其余空间 而不需要额外的Box包裹间隔物的元素 Spacer不幸的是 没有重量调节器 Column modifier Modifier height 120
  • 如何有条件地导入 ES6 模块?

    我需要做类似的事情 if condition import something from something if something something doStuff 上面的代码无法编译 它抛出SyntaxError import an
  • 动态输入值不会使用 codeigniter 保存在数据库中

    I want letting user add dynamic inputs and save those values in the database But with this code only one value save to t
  • 通过字符串生成 EF orderby 表达式[重复]

    这个问题在这里已经有答案了 我想通过字符串参数生成表达式 一些代码如下 private Expression
  • Graphviz - 如何使标签中的文本左对齐?

    我正在使用 graphviz 来可视化我正在解析的语言的 AST 我想包含源代码 作为标签 但 graphviz 对齐标签内的文本 这会扰乱我的缩进 并且代码对缩进敏感 这是问题的示例 第二行代码不应缩进 这是生成的 dot 文件的相关部分
  • 嵌套数组和 ConvertTo-Json

    要使用 REST API 我必须传递一个如下所示的 JSON 对象 series metric custom powershell gauge points 1434684739 1000 注意这里的嵌套数组 我无法重现这个 这是我的代码
  • decltype(auto) 和 decltype(returning expr) 作为返回类型有什么区别?

    有什么区别decltype auto and decltype returning expression 作为函数 模板 的返回类型如果expr在这两种情况下都没有使用括号吗 auto f gt decltype auto return e