std::semiregular
来自cppreference.com
| 在标头 <concepts> 定义
|
||
| |
(C++20 起) | |
semiregular 概念指定类型既为可复制亦为可默认构造。它将被表现类似如 int 这样的内建类型的类型所满足,但它们不需要支持以 == 进行的比较。
示例
Run this code
#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 的聚合初始化表现类似以下构造函数:
// explicit Single(const T& x) : value(x) {}
// 隐式声明的特殊成员函数表现类似以下定义,除了它们可以拥有额外属性。
// Single(const Single& x) : value(x.value) {}
// Single() {}
// ~Single() {}
// Single& operator=(const Single& x) { value = x.value; return *this; }
// 未定义比较运算符;`semiregular` 概念并不要求它
// bool operator==(Single const& other) const = delete;
};
void print(std::semiregular auto x)
{
std::cout << x.value << '\n';
}
int main()
{
Single<int> myInt1{4}; // 聚合初始化: myInt1.value = 4
Single<int> myInt2(myInt1); // 复制构造函数
Single<int> myInt3; // 默认构造函数
myInt3 = myInt2; // 复制赋值运算符
// myInt1 == myInt2; // 错误: operator== 未定义
print(myInt1); // ok: Single<int> 是 `semiregular` 类型
print(myInt2);
print(myInt3);
} // Single<int> 变量于此销毁
输出:
4
4
4
引用
- C++23 标准(ISO/IEC 14882:2024):
- 18.6 Object concepts [concepts.object]
- C++20 标准(ISO/IEC 14882:2020):
- 18.6 Object concepts [concepts.object]
参阅
(C++20) |
指定类型为正则,即它既 semiregular 也 equality_comparable (概念) |