# std::semiregular

< cpp‎ | concepts

定义于头文件 `<concepts>` |  |
template <class T> concept semiregular = std::copyable<T> && std::default_initializable<T>; |  | (C++20 起)

`semiregular` 概念指定类型既为可复制亦为可默认构造。表现类似如 int 的内建类型的类型满足它，除了它们不需要支持以 `==` 比较。

### 示例

    #include <concepts>
    #include <iostream>

    template<std::semiregular T>
    // 版权所有 Alexander Stepanov
    // 概念是 T 上的要求
    // T 上的要求： T 为半正则
    // T a(b) 或 T a = b => 复制构造函数； T a => 默认构造函数； a = b => 赋值；
    struct Single {
        T value;
        // 隐式声明的特殊成员函数表现类似以下定义，除了它们可以拥有额外属性。
        // Single(const Single& x) : value(x.value){}
        // Single(){}
        // ~Single(){}
        // Single& operator=(const Single& x) { value = x.value; return *this; }
    };

    int main()
    {
        Single<int> myInt1;
        myInt1.value = 4;
        Single<int> myInt2(myInt1);
        Single<int> myInt3;
        myInt3 = myInt2;

        std::cout << myInt1.value << ' ' << myInt2.value << ' ' << myInt3.value << '\n';
    }

输出：

    4 4 4

### 参阅

regular (C++20) | 指定类型为正则，即它既为 `semiregular` 亦为 `equality_comparable` (概念)