输入特征优化

时间:2014-12-09 11:52:50

标签: c++ templates c++11

是否有与使用类型特征相关联的效果点击?

更确切地说,是否遵循评估恒定时间?并且编译器可以优化以下某些情况吗?

考虑这样的代码:

template<typename T> void Function()
{
    if(std::is_pointer<T>::value == true)
        DoSmth();
}

Function<int*>();

编译器是否会优化这样的代码以使其有效(在生成的二进制文件中)?

template<> void Function<int*>()
{
        DoSmth();
}

2 个答案:

答案 0 :(得分:4)

编译器肯定允许这样的优化,我怀疑 如果,大多数将传播常量并消除死代码 要求优化。

然而,提供两个似乎更频繁,更惯用 单独的功能,包括:

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

答案 1 :(得分:3)

这些天,相当不错的编译器将删除冗余流量控制检查并生成您在第二个示例中指定的代码。