类型特征优化
Type traits optimizations
使用类型特征是否会对性能造成任何影响?
更准确地说,以下评估是恒定时间吗?编译可以优化以下一些情况吗?
考虑这样的代码:
template<typename T> void Function()
{
if(std::is_pointer<T>::value == true)
DoSmth();
}
Function<int*>();
编译器是否会优化此类代码以有效地(在生成的二进制文件中)成为类似的东西?
template<> void Function<int*>()
{
DoSmth();
}
编译器当然允许这样的优化,我怀疑大多数人将传播常量并消除死代码,如果请求优化。
然而,提供两个似乎更频繁和更惯用单独的功能,大致如下:
template <typename T>
typename std::enable_if<std::is_pointer<T>::value>::type
Function()
{
// Pointer version...
}
template <typename T>
typename std::enable_if<!std::is_pointer<T>::velue>>:type
{
// Non pointer version...
}
甚至在我们enable_if
之前,使用重载似乎更频繁关于帮助程序函数的决议,比如通过传递一个额外的参数将匹配void const*
(如果是指针)或...
(如果不是)。
如今,
几乎体面的编译器将删除冗余的流控制检查并生成您在第二个示例中指定的代码。
相关文章:
- 空基优化子对象的地址
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- 纯函数,为什么没有优化
- basic_string的前导/尾部不区分空格的特征
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 特征 3 类的模板专用化
- C++ 特征图3.5,特征图不使用命名返回值优化?
- 特征:优化入口周围的越界矩阵块/切片
- 类型特征优化