相关疑难解决方法(0)

编译器对编译时分支做了什么?

编辑:我把"if/else"案例作为一个例子,有时可以在编译时解决(例如,当涉及静态值时,cf <type_traits>).将以下答案调整为其他类型的静态分支(例如,多个分支或多标准分支)应该是直截了当的.请注意,使用模板元编程的编译时分支不是此处的主题.


在像这样的典型代码中

#include <type_traits>

template <class T>
T numeric_procedure( const T& x )
{
    if ( std::is_integral<T>::value )
    {
        // Integral types
    }
    else
    {
        // Floating point numeric types
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在代码中稍后定义特定模板类型时,编译器会优化if/else语句吗?

一个简单的替代方案是写这样的东西:

#include <type_traits>

template <class T>
inline T numeric_procedure( const T& x )
{
    return numeric_procedure_impl( x, std::is_integral<T>() );
}

// ------------------------------------------------------------------------

template <class T>
T numeric_procedure_impl( const T& x, std::true_type const )
{
    // Integral types
}

template <class T>
T numeric_procedure_impl( const …
Run Code Online (Sandbox Code Playgroud)

c++ templates if-statement type-traits c++11

33
推荐指数
3
解决办法
4051
查看次数

标签 统计

c++ ×1

c++11 ×1

if-statement ×1

templates ×1

type-traits ×1