C++20概念的布尔可测试性之谜 [英] 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概念的布尔可测试性之谜的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文