# std::conditional

< cpp‎ | types

定义于头文件 `<type_traits>` |  |
template< bool B, class T, class F > struct conditional; |  | (C++11 起)

提供成员 typedef `type` ，若 `B` 在编译时为 true 则定义为 `T` ，或若 `B` 为 false 则定义为 `F` 。

添加 `conditional` 的特化的程序行为未定义。

### 成员类型

成员类型 | 定义
`type` | 若 B == true 则为 `T` ，若 B == false 则为 `F`

### 辅助类型

template< bool B, class T, class F > using conditional_t = typename conditional<B,T,F>::type; |  | (C++14 起)

### 可能的实现

    template<bool B, class T, class F>
    struct conditional { typedef T type; };

    template<class T, class F>
    struct conditional<false, T, F> { typedef F type; };

### 示例

    #include <iostream>
    #include <type_traits>
    #include <typeinfo>

    int main()
    {
        typedef std::conditional<true, int, double>::type Type1;
        typedef std::conditional<false, int, double>::type Type2;
        typedef std::conditional<sizeof(int) >= sizeof(double), int, double>::type Type3;

        std::cout << typeid(Type1).name() << '\n';
        std::cout << typeid(Type2).name() << '\n';
        std::cout << typeid(Type3).name() << '\n';
    }

可能的输出：

    int
    double
    double

### 参阅

enable_if (C++11) | 条件性地从重载决议移除函数重载或模板特化 (类模板)