身份函数:模板和自动的区别

2023-12-12

我正在为我的一些类编写一个身份函数,用于记录其调用的计数(长话短说:指标)。

目前,我正在尝试计算使用模板与使用模板的性能差异/优点auto.

这是从我正在做的代码中摘取的一个简短示例:

namespace Metrics {
    unsigned long identifications = 0;
    //auto version
    auto identity(auto i) {
        //... other stuffs
        identifications++;
        return i;
    };
    //template version
    template<class I> I identity(I i) {
        //... other stuffs
        identifications++;
        return i;
    };
};

还有更多事情要做,但这是基础知识。我知道编译器只会为每个函数创建一个函数,即

identity(5);
identity("5");
//generates the functions
int identity(int i) { ... return i; };
const char* identity(const char* i) { ... return i; };

在运行时,哪个更快? 他们有编译时间差异吗?

因为这个函数应该被调用a lot,我对运行时性能更感兴趣,但也可能有大量类型可以为其生成函数,因此我也对哪种类型在编译时更快感兴趣。


auto identity(auto i)
{
    //...
    return i;
}

是一个简写

template <class T>
auto identity(T i)
{
    // ...
    return i;
}

这又是一个简写

template <class T>
T identity(T i)
{
    // ...
    return i;
}

所以没有任何区别。


不适用于您的示例,但如果您要使用auto您需要注意一些参数:

auto作为返回类型

auto foo(auto a)

Does not mean

// not this
template <class T>
T foo(T a)

返回类型将从中的返回表达式推导出来foo定义,就像任何auto返回类型。碰巧在您的函数中,返回类型被推导为与参数类型相同。

多种的auto参数

void foo(auto a, auto b)

Is not相当于

// not this
template <class T>
void foo(T a, T b)

but with

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

身份函数:模板和自动的区别 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 从 csv 打印第一列时出现 Python 'KeyError: 0'

    我是 python 新手 尝试按列索引读取每一行 但得到KeyError 0执行以下代码时 with open processed test csv as f reader csv DictReader f for row in reade
  • 处理多态对象集合的正确设计模式

    假设我有以下课程 class BaseObject public virtual int getSomeCommonProperty class Object1 public BaseObject public virtual int ge
  • Python从项目列表创建字典键

    我希望使用 Python 字典来跟踪一些正在运行的任务 这些任务中的每一个都有许多使其独一无二的属性 因此我想使用这些属性的函数来生成字典键 以便我可以使用相同的属性再次在字典中找到它们 像下面这样 class Task object de
  • Spring Boot War 在 Jboss 7.1 上不起作用

    我正在尝试在 Jboss 上部署 Spring boot 应用程序 我跟随this将我的 jar 转换为 war 文件的教程 但是当我尝试在 Jboss 上运行应用程序时 它给了我这个错误 17 02 31 462 ERROR org ap
  • 如何让一个数成为幂呢?

    我的 JavaScript 有这个 A B C 其他的我都有了 但是我怎样才能有C作为力量呢 我认为使用 会起作用 但它只是添加它 JavaScript 没有求幂运算符 实际上是按位异或运算符 尝试使用Math pow反而 var d Ma
  • iOS 应用程序生命周期 4/3GS/iPad 与 2G/3G

    我读过苹果的文档关于应用程序生命周期并进行了一些测试以了解不同设备上的应用程序生命周期 除 2G 外均运行 iOS 4 x 我已经测试了具有 多任务处理 功能的设备与一些不支持此功能的设备 iPhone 2G 3G 应用程序生命周期 STA
  • 使用 python 编译 pin 工具时出错,出现错误 C2872:“UINT32”:不明确的符号

    我正在尝试编译 pin 工具Python h我收到了超过 100 个关于不明确符号的错误 我试图分开include到不同的命名空间 但它产生了许多其他错误 包含时也会发生同样的情况windows h 所有错误看起来都是这样的 D proj
  • 为什么这个承诺会悄然落空?

    db collection findOne是一个异步操作 MongoDB 但这在这里并不重要 这就是为什么我在这里将它包装在一个承诺中 var letsDoSomething new Promise function resolve rej
  • 代码可以在 jsfiddle 中运行,但不能在 html 文档中运行

    我是 javascript 的初学者 希望有人能帮助我解决这个问题 我正在尝试制作一个带有 id 的 div 移动 来回滑动 该代码在 jsfiddle 中工作 但当我将其放入 html 文档中时将无法工作 我尝试将顶部部分放在单独的 js
  • MySQL:从表中选择日期位于当前周和当前月的数据

    我正在创建一个网络应用程序 如果用户单击名为 WEEK 的链接 该页面会显示该周提交的所有帖子 还有一个选项可以查看本月提交的所有帖子 posts 表中有一个名为 post date 的列 其中日期的存储格式为 YYYY MM DD 我的问
  • Nodejs HTTP 和 HTTPS 通过同一端口

    我一直在谷歌搜索并在 stackoverflow 上查看 但找不到我喜欢的答案 我有一个通过 HTTPS 和端口 3001 运行的 NodeJS 服务器 现在我想获取端口 3001 上的所有传入 HTTP 请求 并将它们重定向到相同的 UR
  • 为什么使用切片克隆列表会影响原始列表

    下面是我将数组内的对象更改为字符串的代码 无法弄清楚为什么它会影响原始数组 slice 应该克隆数组 如果我是对的 var cloned scope selected items slice 0 cloned forEach functio
  • Hibernate - 外键而不是实体

    目前 Hibernate 允许我直接加载由 一对一关系定义的对象 entity1 getEntity2 是否可以获取外键而不是对象 我看到的当前方法是添加到我的映射中 JoinColumn name message key ManyToOn
  • 使用 while 循环遍历数组? - MIPS [重复]

    这个问题在这里已经有答案了 我想循环遍历一个数字数组 例如 word 2 2 2 2 2 2 2 2 2 2 2 2 2 word 2 2 2 2 2 2 2 2 2 2 2 2 2 word 2 2 2 2 2 2 2 2 2 2 2 2
  • Jenkins 使用 Groovy 读取 Jenkinsfile 中文件的特定行

    我正在尝试读取某行的特定行html詹金斯中的文件stage with Groovy并将其内容保存到环境变量中 问题是 File and readLines 不允许 我能够加载文件 env WORKSPACE pwd def file rea
  • PostgreSQL 交叉表查询

    如何在 PostgreSQL 中创建交叉表查询 例如我有下表 Section Status Count A Active 1 A Inactive 2 B Active 4 B Inactive 5 我希望查询返回以下交叉表 Section
  • 短的、不区分大小写的字符串混淆策略

    我正在寻找一种识别方法 即编码and解码 一组带有一个标记的 Java 字符串 识别不应涉及数据库持久化 到目前为止 我已经研究了 Base64 编码和 DES 加密 但对于以下要求而言 两者都不是最佳的 Token应该尽可能短 令牌应该对
  • 如何释放通用 TList

    我怎样才能释放一个通用的TList
  • Android 2.2 Spinner 在 Actionbar 中看起来很旧

    在 Android 2 2 上 我的 ActionBar 中的 Spinner 看起来非常丑陋 并且下拉文本颜色与背景颜色相同 这使得文本不可读 这是相关代码 spinner new Spinner getSupportActionBar
  • 身份函数:模板和自动的区别

    我正在为我的一些类编写一个身份函数 用于记录其调用的计数 长话短说 指标 目前 我正在尝试计算使用模板与使用模板的性能差异 优点auto 这是从我正在做的代码中摘取的一个简短示例 namespace Metrics unsigned lon