在 C++14 中使用 auto 作为返回值和参数类型

2023-11-29

在 Bjarne Stroustrup 的书(《C++ 编程语言》)的第四版中,我们读到:

使用 auto ,我们可以避免冗余和编写长类型名称。这在泛型编程中尤其重要,因为程序员很难知道对象的确切类型,并且类型名称可能很长(第 4.5.1 节)。

所以,了解这个类型的重要性。我做了这个小测试程序:

#include <iostream>

/*-----------------------------*/
auto multiplication(auto a, auto b)
{
    return a * b;
}


int main()
{
  auto c = multiplication(5,.134);
  auto d = 5 * .134;
  std::cout<<c<<"\n"<<d<<"\n";

}

该程序的标准输出(使用 -std=C++14 编译):

0
0.67

我想知道为什么即使乘法函数的返回类型是 auto,c 和 d 变量也会得到不同的结果(类型)。

EDIT:我的海湾合作委员会版本:gcc version 5.4.0 20160609


首先,您的代码使用海湾合作委员会扩展,即自动功能参数.

我猜你的gcc版本无法与扩展一起正常工作并提供不正确的结果(gcc 7.1 I have 0.67 0.67甚至使用自动参数)。

用标准重写函数的正常方法C++是应用模板:

template<typename T, typename U>
auto multiplication(T a, U b)
{
    return a * b;
}

并让编译器推断返回类型。

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

在 C++14 中使用 auto 作为返回值和参数类型 的相关文章

随机推荐

  • 如何从R中的数据框中选择具有特定日期的一些行

    我有一个很大的数据集 我想特别挑选一些行 我想知道是否有人可以帮助我 非常感谢你的帮助 例如 如果我只想挑选 2 1 2008 5 1 2008 加上 9 1 2008 11 1 2008 的行 我该怎么做 非常感谢 有人可以帮忙吗 dat
  • 如何知道您构建的 iOS 应用程序是否适用于 64 位。

    我正在尝试构建 64 位 iOS 应用程序 我如何知道它是针对 32 位还是 64 位构建的 Mach O View 有帮助吗 如果是 去哪里寻找 还有它的命令行吗 我提到了这个 但它并不能帮助我知道它是否是为 64 位构建的 https
  • 为什么 django 抱怨我还没有设置我的引擎?

    DATABASES default ENGINE django db backends mysql Add postgresql psycopg2 postgresql mysql sqlite3 or oracle NAME django
  • addEventListener() 不起作用

    好的 所以我尝试使用 addEventListener 函数来创建此页面 以解决按钮的单击问题 它不起作用 我通过删除除侦听器所需的基本元素之外的所有内容来缩小范围 并留下以下内容
  • 找到图像的边缘并在 MATLAB 中裁剪它

    我有一个 RGB 图像 我已经扫描了图像 因此 该图像仅占 A4 尺寸纸张的一小部分 我想找到图像的边界并裁剪它 我可以使用 Sobel 等边缘检测运算符 但它们会检测图像中存在的所有边缘 我想要的只是图像的边框 此外 许多边缘检测函数 包
  • SQL ORDER BY on Update - 根据条件更新最后一条记录

    我正在尝试更新表 Log 的最后一条记录 具有最新 TimeAccessed 的字段 因为 TimeExited 为空 并且计算机名与 cm 参数相同 我有这个 但出现错误 sql 语句末尾缺少分号 怎么了 dbs Execute UPDA
  • 故事板prepareForSegue

    我有一个关于故事板转场的问题 平台是iOS 6 1 目标设备是 iPhone IDE是Xcode 4 5 2 我拥有的是 2 个 TableViewController 它们都有一个到同一个 ViewController 的 segue s
  • 如何使用 HttpWebRequest GET 方法与/ Content Type="application/json"

    这个非常简单 运行这个 Silverlight4 示例并注释掉 ContentType 属性 您将从我的服务以 xml 形式返回响应 现在取消注释该属性并运行它 您将得到一个 ProtocolViolationException 应该发生的
  • 将未定义数量的参数转发给另一个函数

    我将用一个接受任意数量函数的简单函数来解释这个问题 function abc args func get args Now lets use the first parameter in something In this case a s
  • 从 UIColor 创建 UIImage 用作 UIButton 的背景图像[重复]

    这个问题在这里已经有答案了 我正在创建这样的彩色图像 CGRect rect CGRectMake 0 0 1 1 UIGraphicsBeginImageContext rect size CGContextRef context UIG
  • Android Activity 作为内部类

    我正在尝试声明 AndroidActivity作为内部类 这Activity应该只由包含的类生成 并且需要访问它的一些私有方法 我真的不想公开的方法 当尝试生成它时 我得到了这个 java lang InstantiationExcepti
  • 使用 bash 用逗号分隔字段

    如何在字段之间放置逗号 输入数据 12123 QA test case 1 QA environment 12234 UAT test case 1 UAT environment 预期产出 12123 QA test case 1 QA
  • Puppeteer 选项卡仅在 youtube.com 上崩溃(噢,啪!STATUS_ACCESS_VIOLATION)

    我正在使用 puppeteer 从 Youtube 的搜索结果中获取屏幕截图 不幸的是 我无法让代码在此页面上运行 任何其他页面 还有 youtube 作品中的其他页面 当我使用 https www youtube com 作为网址时 我也
  • 使用 jquery 查找 ul li 列表中任何 li 块中最深的和最后一个 li?

    我有一个 HTML 列表 有几个嵌套的 ul 和 li 当我单击 li 时 我想找到该 li 标记中最深的项目 其中没有 ul 标记 并且 li 是该组的最后一项 例子例如 点击此链接 这是我的HTML code 这是我的方法 liclk
  • 带比较器的 Java 8 流过滤器

    我想过滤列表MyObject基于values场地 在这种情况下 如果有任何值MyObject getValues小于给定值value 则谓词为假 我还没有找到使用 Stream API 的方法 所以我尝试了ComparatorPredica
  • CodeSandbox.io 标签未加载图像

    我一直在尝试使用添加图像 img tag on CodeSandbox io 但是 每次我尝试添加它时 它都不会显示 只是默认为alt标签 显示山 我正在尝试将图像加载到与包含此 JS 文件的文件相同的文件夹中 下面是生成 HTML 的代码
  • 此集合实例上不存在属性 [title]

    我正在关注 Laracasts 的视频 基本模型 控制器 视图工作流程 我有一张表保存联系信息 CREATE TABLE about id int 10 UNSIGNED NOT NULL title varchar 500 COLLATE
  • Django 中的 DecimalField 验证

    我正在尝试验证DecimalField在姜戈中 在外壳中尝试 gt gt from django forms import DecimalField gt gt from django core validators import MaxV
  • WinSCP 命令行:在缓存错误中找不到主机密钥

    我第一次尝试从 WinSCP 命令行连接到 Unix 服务器 它关闭并出现以下错误 在缓存中找不到服务器的主机密钥 您无法保证 服务器是您认为的计算机 服务器的 rsa2 密钥指纹是 ssh rsa 1024 42 9e c7 f4 7f
  • 在 C++14 中使用 auto 作为返回值和参数类型

    在 Bjarne Stroustrup 的书 C 编程语言 的第四版中 我们读到 使用 auto 我们可以避免冗余和编写长类型名称 这在泛型编程中尤其重要 因为程序员很难知道对象的确切类型 并且类型名称可能很长 第 4 5 1 节 所以 了