C++20 给了我们飞船操作符,甚至允许我们使用default它,用默认语义生成所有比较,这将从我们的代码库中删除很多样板,太棒了!
但是平等和不平等呢?C++20 是否也给了我们一条通往default平等和不平等的道路?根据cppreference.com,默认的飞船只会给我们那么,有没有办法在 C++20 中也(或仅)默认生成< <= >, and >=,而不是==and !=。鉴于我通常需要更多/更少的平等/不平等方式,这似乎很不幸。==和!=?
更新:该页面现在包含对 defaulting 的描述operator==。似乎我在添加文档前两小时访问了该页面。:D
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!=
这是不准确的。默认三向比较为我们提供了所有比较因此,在这种情况下不需要上述内容。