c++ - 在 C++ : copy or reference, 或中传递只读参数

标签 c++ templates reference

我有一个模板函数,它接受一个模板类型的只读参数。这是一个适用于各种平台的库函数,从 8 位 (AVR8) 到 32 位 (Cortex)。如何传递这个参数?

template< typename T >
void f( const T p ){ ... }

template< typename T >
void f( const T & p ){ ... }

对于小于指针的参数类型,按值(可能)更有效,对于比指针大和/或复制成本高的参数类型,按引用(可能)更有效。

是否有任何标准的方法来抽象这个选择,比如

template< typename T >
void f( pass_efficiently< T > p ){ ... }

?

最佳答案

您可以使用 std::is_fundamental检查该值是否为内置类型,如果为真,则重载/专门化以按值传递。

使用类型支持库还有更多需要专门研究的东西 <type_traits> 例如 is_enum , is_trivially_copyable , is_array还有很多。我建议您检查一下,看看哪种最适合您。

std::is_fundamental 的引用链接:
https://en.cppreference.com/w/cpp/types/is_fundamental
<type_traits> 的引用链接:
https://en.cppreference.com/w/cpp/header/type_traits

关于c++ - 在 C++ : copy or reference, 或中传递只读参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402532/

相关文章:

c++ - 生成不同格式的图像字节数据

c++ - 如何从指向对象的指针 vector 中删除对象?

c++ - 引用折叠规则未按预期应用?

C++ 部分模板特化 : Member Functions

c++ - 变量内部变量的问题一旦更改就会恢复

c++ - 函数不想接受我的论点?

c++ - 我需要有关构建 C++ 堆栈模板的帮助。 "StackType<int>::~StackType<int>(void)"错误?

asp.net - 我的项目引用了 3 个不同版本的 mscorlib.dll

html - Wordpress 内部样式的问题

C++ 将对象传递给函数