# std::default_initializable

< cpp‎ | concepts

定义于头文件 `<concepts>` |  |
template < class T > concept default_initializable = std::constructible_from<T> && requires { T{}; } && /* T t; 为良构，见后述 */; |  | (C++20 起)

`default_initializable` 概念检查 `T` 类型变量能否

- 值初始化（ T() 为良构）
- 从空初始化器列表直接列表初始化（ T{} 为良构）；以及
- 默认初始化（ T t; 为良构）。

如同在与 T 无关的语境中进行访问检查。仅考虑变量初始化的立即语境的合法性。

### 可能的实现

    template<class T>
    concept default_initializable =
        std::constructible_from<T> &&
        requires { T{}; } &&
        requires { ::new (static_cast<void*>(nullptr)) T; };

### 参阅

constructible_from (C++20) | 指定该类型的变量能从一组实参类型进行构造，或绑定到一组实参类型 (概念)
is_default_constructible is_trivially_default_constructible is_nothrow_default_constructible (C++11)(C++11)(C++11) | 检查类型是否有默认构造函数 (类模板)