模板比文字函数慢
Templates are slower that literal functions?
这是我的一个重要疑问。模板函数是否比文字函数慢(即使用完整类型声明)?
根据我的测试(例如,在之前的答案中),模板函数可以与非模板函数具有相同的速度,但通常不会。最大的区别在于,模板函数通常会通过引用接收其形参,以防它们"大"。非模板函数更有可能按值接收其参数,如果参数相当小,这通常会提高速度。但是,如果和都通过引用接收它们的参数,我发现至少在某些情况下,模板实际上会比非模板代码快一点。
但是也要注意,函子经常会打败这两者(例如,正是在上面引用的测试中发生的)。
一般来说没有区别,因为编译器将实例化的模板扩展成相同的代码,就好像你自己编写的一样。
换句话说,模板是在编译时处理的,而不是在运行时处理的。
不,它们在编译时被编译成常规函数。
在运行时,它们与其他函数完全相同。
我认为正确的答案如下:模板函数具有相同的运行时性能,但在某些情况下可能需要更长的编译时间
每个模板都将接收一个类型,因此编译后是一个"文字函数"。所以我猜他们并不慢。
No。当模板被实例化时,编译器使用模板形参生成一个函数,生成的函数与使用这些类型编写的非模板函数一模一样。
相关文章:
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- 常量函数,当其参数是对文字类型的引用时
- 函数参数中使用的复杂文字'i'
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- 将整数(文字)与函数相关联,让呼叫者查询拖鞋的数量
- 如何正确地将 u8 字符串文字传递给接受 UTF-8 字符串的 C 函数
- 使用constexpr验证构造函数中的文字参数
- 字符串文字可以传递给接受常量字符*的函数吗?
- 如何在 constexpr 函数内的字符串文字上静态断言条件
- C++11 - 无法使用 constexpr 函数定义 constexpr 文字?
- 将C数组文字转换为在C 构造函数中工作
- constexpr函数体c++14中可以有非文字类型的定义变量吗
- _mm_extract_epi8(..) 内部函数,采用非文字整数作为参数
- 当一个函数可以被赋予一个 char* 或文字字符串时,声明这个函数的正确方法是什么?
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- C++:直接在参数列表中使用数组文字的对象构造函数
- 如何在 C 或C++宏中使用函数作为文字字符串
- 如何使用数组(无向量)将多个字符串文字传递给函数
- 在函数调用中,用大括号括起值文字evalue到什么位置
- 构造函数在尝试支持文字时重载歧义