类型特征优化

Type traits optimizations

本文关键字:优化 特征 类型      更新时间:2023-10-16

使用类型特征是否会对性能造成任何影响?

更准确地说,以下评估是恒定时间吗?编译可以优化以下一些情况吗?

考虑这样的代码:

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*(如果是指针)或...(如果不是)。

如今,

几乎体面的编译器将删除冗余的流控制检查并生成您在第二个示例中指定的代码。