# std::get_if

< cpp‎ | utility‎ | variant

定义于头文件 `<variant>` |  |
| (1) | (C++17 起)
template< std::size_t I, class... Types > constexpr std::add_pointer_t<std::variant_alternative_t<I, std::variant<Types...>>> get_if( std::variant<Types...>* pv ) noexcept; |  |
template< std::size_t I, class... Types > constexpr std::add_pointer_t<const std::variant_alternative_t<I, variant<Types...>>> get_if( const std::variant<Types...>* pv ) noexcept; |  |
| (2) | (C++17 起)
template< class T, class... Types > constexpr std::add_pointer_t<T> get_if( std::variant<Types...>* pv ) noexcept; |  |
template< class T, class... Types > constexpr std::add_pointer_t<const T> get_if( const std::variant<Types...>* pv ) noexcept; |  |

1) 基于下标的不抛出访问器：若 `pv` 不是空指针且 pv->index() == I ，则返回指向存储于 `pv` 所指向的 `variant` 中的值的指针。否则，返回空指针值。若 `I` 不是 `variant` 的合法下标，则此调用为病式。
2) 基于类型的不抛出访问器：等价于 (1) ，其中 `I` 是 `T` 在 `Types...` 中的零基下标。若 `T` 不是 `Types...` 中的唯一存在的元素，则此调用为病式。

### 参数

I | - | 要查找的下标
Type | - | 要查找的类型
pv | - | 指向 `variant` 的指针

### 返回值

指向存储于被指向的 `variant` 中值的指针，错误时为空指针。

### 示例

    #include <variant>
    #include <iostream>

    int main()
    {
        std::variant<int, float> v{12};

        if(auto pval = std::get_if<int>(&v))
          std::cout << "variant value: " << *pval << '\n';
        else
          std::cout << "failed to get value!" << '\n';
    }

输出：

    variant value: 12

### 参阅

std::get(std::variant) (C++17) | 以给定索引或类型（若类型唯一）读取 `variant` 的值，错误时抛出异常 (函数模板)