c++ - 在 C++ 中传递只读参数:复制或引用,或
问题描述
我有一个模板函数,它接受模板类型的只读参数。这是一个适用于各种平台的库函数,从 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
推荐阅读
- class - 使用 vue js 进行条件类
- c - 有条件的移动取决于一个统一的变量 C 和双重 for 循环
- firebase - Flutter - 如何检查是否完美上传/删除到firebase数据库的数据?
- git - 为什么设置遥控器后我无法将我的代码推送到我的 GitHub 存储库?
- php - 我怎样才能只显示 1 个 ID?
- reactjs - Material-UI ClickAwayListener 立即触发
- java - Java 程序无故无限运行 - 没有 StackOverflow 但程序永远不会终止 - 数独生成器
- swift - 如何从url中提取没有www的域名
- ios - iOS 组合框架 - 发布者只发布一次,然后再也不发布
- python - CS50 (2020) PSET6 DNA IndexError:列表索引超出范围