# std::is_final

< cpp‎ | types

定义于头文件 `<type_traits>` |  |
template< class T > struct is_final; |  | (C++14 起)

若 `T` 为 final 类（即以 final 指定符声明的类），则提供等于 true 的成员常量 `value` 。对于任何其他类型， `value` 为 false 。

若 `T` 为类类型，则 `T` 应为完整类型；否则行为未定义。

添加 `is_final` 或 `is_final_v` (C++17 起) 的特化的程序行为未定义。

### 模板形参

T | - | 要检查的类型

### 辅助变量模板

template< class T > inline constexpr bool is_final_v = is_final<T>::value; |  | (C++17 起)

## 继承自 std::integral_constant

### 成员常量

value [静态] | 若 `T` 为 final 类类型则为 true ，否则为 false (公开静态成员常量)

### 成员函数

operator bool | 转换对象为 bool ，返回 `value` (公开成员函数)
operator() (C++14) | 返回 `value` (公开成员函数)

### 成员类型

类型 | 定义
`value_type` | `bool`
`type` | std::integral_constant<bool, value>

### 注意

不能以 final 类为基类。

能标记联合体为 `final` （而 `std::is_final` 将检测它），尽管任何情况下都不能以联合体为基类。

### 示例

    #include <iostream>
    #include <type_traits>

    class A {};
    class B final {};

    int main()
    {
        std::cout
            << std::boolalpha
            << std::is_final<A>::value << '\n'
            << std::is_final<B>::value << '\n';
    }

输出：

    false
    true

### 参阅

is_class (C++11) | 检查类型是否非联合类类型 (类模板)
is_polymorphic (C++11) | 检查类型是否为多态类类型 (类模板)