The mystery of C++20 concept boolean-testable(C++20概念的布尔可测试性之谜)
问题描述
C++20引入了一个比较概念boolean-testable,但我注意到它的斜体和中间的连字符,表示它只用于展示,由于<concepts>
中没有所谓的std::boolean_testable
,我们不能在我们自己的代码中使用它。
此仅展示概念的用途是什么?为什么这个概念如此神秘?
推荐答案
其目的与所有仅用于说明的概念一样,是为了简化标准中的规范。它只是一个构建块,用于指定其他(可能面向用户的)概念,而不需要重复概念模型。值得注意的是,它出现在another exposition-only concept
的规范中template<class T, class U>
concept weakly-equality-comparable-with = // exposition only
requires(const remove_reference_t<T>& t,
const remove_reference_t<U>& u) {
{ t == u } -> boolean-testable;
{ t != u } -> boolean-testable;
{ u == t } -> boolean-testable;
{ u != t } -> boolean-testable;
};
weakly-equality-comparable-with
对于用不一定逐字返回的返回类型重载比较运算符的类型是满足的。我们仍然可以使用这些表达来比较对象,因此该标准试图对它们进行推理。这不是假设,它们可以出现在野外。Palo Alto report中的一个示例:
.一个这样的例子是QChar类的早期版本(至少是1.5版和更早版本)(诺基亚公司,2011)。
class QChar { friend int operator==(QChar c1, QChar c2); friend int operator!=(QChar c1, QChar c2); };
我们应该能够在我们的标准算法中使用此类,尽管运算符不返回布尔值。
关于您的其他问题
为什么这个概念如此神秘?
并非如此。但如果仅从cp首选项来检查它,可能会错过上下文,因为在那里交叉引用它可能并不容易。
这篇关于C++20概念的布尔可测试性之谜的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++20概念的布尔可测试性之谜


基础教程推荐
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01