函数中的自动参数类型

2023-11-21

我想知道标准委员会是否考虑扩展C++14auto关键字来推导函数模板参数类型,就像现在泛型 lambda 中存在的那样。 (正如这个答案中很好地描述的那样)

因为它适用于 lambda 函数,所以它也应该适用于任何函数。当然,这对于经典语法来说是完全多余的:

template< typename T >
void f(T param);

但能够这样写,得到相同的结果:

void f(auto param);

我认为可以减少堵塞的代码(更短、更整洁),并在这个用例中实现良好的一致性:

auto v = func1();
f(v);

正如你所看到的,我们使用自动类型推导器来声明v,但是我们必须使用硬类型参数化函数 f 或模板化 f。
结合auto我们应该使用auto,这样会更加一致。

EDIT: 这个问题确实有效地问了同样的事情,但不那么直接。尚未得到 user657267 给出的答案,我在其下复制并扩展。


好的,感谢 Piotr 指出了另一个问题,询问了同样的事情,我在评论中找到了可以解决此问题的信息,如下:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4040.pdf

第 16 页,第 5.1.1 章命名generic functions

泛型函数是一个函数模板,其 template-parameter-list 有一个参数声明,其 类型说明符是 auto 或 constrained-type-name。

[ 例子:

auto f(auto x); // Ok
void sort(C& c); // Ok (assuming C names a concept)

—结束示例]

这看起来相当积极:)

接下来是与通用 lambda 匹配的预期明显措辞:

泛型函数的声明有一个模板参数列表 由一个发明的类型模板参数组成 自动的发生。

[ 示例:以下通用函数声明是等效的:

template<typenaem T>  
conxtexpr bool C() { ... }  
auto f(auto x, const C& y);  
template<typename T1, C T2> 
auto f(T1 x, const T2& y);

y 的类型是受 C 约束的类型参数。 — 示例结束]

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

函数中的自动参数类型 的相关文章

  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可

随机推荐

  • Python 模块未通过终端找到,但在 python shell、Linux 上找到

    我已经在我的笔记本电脑上安装了ubuntu 并且安装了python 安装python2 7 5后 我试图在终端上运行python脚本 但它说找不到模块 我开始下载所有模块 但它仍然说找不到模块 升级到 python2 7 9 后它仍然这么说
  • Ionic 4 发布后安装本机插件时出现 Ionic 3 错误

    当安装 Native Store 成功时 我使用本机插件 ionic 3 遇到问题 但是当我尝试添加应用程序模块时 文本编辑器显示一条红线 当我尝试运行时 我发现了如下错误 这里我安装 Native store https ionicfra
  • AngularJS 和 Rails 路由错误

    我正在关注以下教程 https thinkster io angular rails 当我到达 将前端与资产管道集成 部分时 事情就崩溃了 该网站陷入无限循环并不断产生相同的错误 我已经检查并重新检查了每个步骤 有人可以帮忙吗 Error
  • 在bash中提取不带路径和扩展名的文件基名[重复]

    这个问题在这里已经有答案了 给定如下文件名 the path foo txt bar txt 我希望得到 foo bar 为什么这不起作用 bin bash fullfile 1 fname basename fullfile fbname
  • “grep -q”不以“tail -f”退出

    我正在尝试实现一个等待日志文件中特定消息的脚本 记录消息后 我想继续执行脚本 这是我正在尝试的tail f and grep q tail f logfile grep q Message to continue The grep永远不会退
  • 使用 Reactjs 的 Axios Post 表单

    所以我用 Axios 有这个 post 方法 如果我提交这个 它说 未捕获 承诺 错误 网络错误 在创建错误 createError js 16 在 XMLHttpRequest handleError xhr js 87 如果我使用这个方
  • 壁虎驱动器和木偶之间的区别[重复]

    这个问题在这里已经有答案了 我不完全理解之间的区别壁虎司机 and 木偶 谁能澄清它们之间的区别 例如 当我使用 Selenium WebDriver 来控制 Firefox 浏览器时 我需要一个 geckodriver 二进制文件来监听W
  • 角度分量进入传单弹出窗口

    无法弄清楚如何将组件生成到传单弹出窗口中 我尝试过两件事 首先 将组件选择器集成到 html 中 但看起来 Angular 没有编译它 let my geojson L geoJSON data onEachFeature feature
  • ASP.NET MVC3 Razor - 在回发时保持滚动位置

    对使用 MvcContrib 框架的网格表进行排序后 如何在回发时保持滚动位置 通常的方法是使用一些 javascript 将当前滚动位置设置为隐藏字段 然后在页面加载时恢复该位置 通常在 jquery 就绪事件中 然而 这实际上只是一个副
  • 无法从docker拉取镜像,ProcessUtilityVMImage找不到指定的路径

    我制作了一个 net core 应用程序并将其上传到 docker hub 当我尝试将其拉到我自己的机器上时 win 10 它就可以工作 当我尝试将其拉到服务器 服务器 2016 时 出现错误 docker pull arrivaflg f
  • 如何统计每个类别的商品数量?

    我想对网站上的产品进行过滤 像这样的东西 Department lassics 13 395 Literary 111 399 History 68 606 Format HTML 3 637 PDF 8 Audio CD 443 Lang
  • 根据查询计数

    给定一个包含 N 个正元素的数组 假设我们列出了数组 A 的所有 N N 1 2 个非空连续子数组 然后用相应子数组中存在的最大元素替换所有子数组 所以现在我们有 N N 1 2 个元素 其中每个元素都是其子数组中的最大值 现在我们有 Q
  • 如何右对齐

    标签?

    我有几个 p 我想要右对齐的标签 有谁知道如何做到这一点 CSS p text align right INLINE p p style text align right Some Text p jQuery p css text alig
  • 如何使用 flutter google_maps 插件获取可见地图的边界?

    我试图找出 flutter 的谷歌地图插件中谷歌地图可见部分的边界框是什么 可以获得吗 如果不是 是否可以根据缩放级别和地图中心的纬度 经度来计算边界框 那将是GoogleMapController getVisibleRegion
  • 如何从 Azure DevOps 中的 YAML 管道获取阶段结果

    到目前为止 我正在使用Azure DevOps REST Api从 Azure DevOps 中的版本获取数据以用于报告目的 显然 这将随着使用 CI CD gt YAML 和多阶段管道 当前预览 的新方式而改变 在这种情况下 构建和发布策
  • 分块读取大文件c#

    我想逐块读取非常大的文件 4GBish 我目前正在尝试使用StreamReader和Read 读取方法 语法是 sr Read char buffer int index int count 因为index is an int它会overf
  • 缓存策略,输出缓存与数据缓存或两者兼而有之?

    我正在开发一个 ASP NET MVC 项目 现在我想开始考虑我的缓存策略 我试图让我的框架尽可能开放以供缓存使用 据我在 Scott Hanselman 的播客中听到的消息 StackOverflow com 使用页面输出缓存并压缩该内容
  • Spring Boot 在 Gradle 中获取包的属性

    我正在尝试将我的项目从 Maven 构建转换为 Gradle 目前项目使用Spring Boot 在我当前的 Maven 配置中 我有
  • 如何解决VScode UnsupportedClassVersionError?

    Problem 当我运行 HelloWorld 时 它返回 java lang UnsupportedClassVersionError HelloWorld 已编译 通过更新版本的 Java 运行时 类文件版本 52 65535 该版本的
  • 函数中的自动参数类型

    我想知道标准委员会是否考虑扩展C 14auto关键字来推导函数模板参数类型 就像现在泛型 lambda 中存在的那样 正如这个答案中很好地描述的那样 因为它适用于 lambda 函数 所以它也应该适用于任何函数 当然 这对于经典语法来说是完