C++20 默认等式/不等式

gex*_*ide 10 c++ c++20

C++20 给了我们飞船操作符,甚至允许我们使用default它,用默认语义生成所有比较,这将从我们的代码库中删除很多样板,太棒了!

但是平等和不平等呢?C++20 是否也给了我们一条通往default平等和不平等的道路?根据cppreference.com,默认的飞船只会给我们< <= >, and >=,而不是==and !=。鉴于我通常需要更多/更少的平等/不平等方式,这似乎很不幸。那么,有没有办法在 C++20 中也(或仅)默认生成==!=

更新:该页面现在包含对 defaulting 的描述operator==。似乎我在添加文档前两小时访问了该页面。:D

eer*_*ika 7

C++20 是否也给了我们一种默认相等和不等式的方法?

是的(但请参阅最后一段)。语法是一样的:

friend bool operator==(const T&, const T&) = default;
friend bool operator!=(const T&, const T&) = default; // not needed if == exists
Run Code Online (Sandbox Code Playgroud)

有序不等式也可以默认:

friend bool operator<=(const T&, const T&) = default;
// ...
Run Code Online (Sandbox Code Playgroud)

默认的飞船只会给我们< <= >, and >=, 而不是==and!=

这是不准确的。默认三向比较为我们提供了所有比较因此,在这种情况下不需要上述内容。

  • @gexicide 默认 == 今天似乎已添加到 cppreference 中,以及 *“根据任何运算符 &lt;=&gt; 重载的规则,默认的 &lt;=&gt; 重载也将允许类型与 &lt;、&lt;= 进行比较, &gt; 和 &gt;=。如果operator&lt;=&gt; 是默认的,而operator== 根本没有定义,那么operator== 也被认为是默认的。"* (2认同)