10得票1回答
为什么我需要包含<compare>头文件才能编译使用<=>运算符?

我知道技术上的答案是:因为标准规定如此。但我对其动机感到困惑: 我认为在默认&lt;=&gt;时没有任何"库"的东西:它可能会返回一些在std中技术上定义的类型,但从某种意义上说,它是一个"虚假的库"类型,因为编译器必须知道它,因为它必须能够使用auto返回类型来默认operator &lt...

302得票6回答
在C++中,"<=>"("spaceship",三路比较)运算符是什么?

在我试图了解C++运算符的过程中,我偶然发现了一个列出了一个奇怪比较运算符的表格。这个&lt;=&gt;运算符是做什么用的? 自2017年以来,cppreference.com更新了该页面,现在包含了关于&lt;=&gt;运算符的详细信息。

10得票1回答
为什么默认的三路运算符(太空船 <=>)会生成等号运算符(==),而用户定义的三路运算符则不会?

考虑以下代码: #include &lt;iostream&gt; #include &lt;compare&gt; class A { public: int i = {}; std::strong_ordering operator&lt;=&gt; (A const&amp...

10得票1回答
为什么这段Clang代码在使用-std=c++20选项编译时无法通过Clang 10的编译?

使用clang10和-std=c++20编译时,以下程序无法编译通过#include "clang/AST/ASTContext.h" int main(){} 使用 -std=c++17 可以使其正常工作。 这是编译尝试输出(请注意,由于我没有在命令行中提供必需的 -l,因此在 C++17...

8得票1回答
C++20 中排序类型的含义

C++20 允许用户在定义 operator &lt;=&gt; 时指定不同的返回类型:std::partial_ordering、std::weak_ordering 和 std::strong_ordering。指定它们是否意味着相应的类承诺遵守某些排序公理?例如,对于部分排序,这些公理将...

9得票2回答
为什么在宇宙飞船操作符中只有一个等号?

为什么太空船操作符&lt;=&gt;选择一个等号而不是两个?这是否被认为与通常意味着赋值的一个等号和比较的两个等号不一致?

47得票3回答
C++20三路比较带来更多的静默行为变化

让我感到惊讶的是,我遇到了另一个问题,类似于 C++20行为破坏现有代码等于运算符?。 考虑一个简单的不区分大小写的键类型,可用于例如std::set或std::map:// Represents case insensitive keys struct CiKey : std::string...

7得票2回答
C++20中的运算符==和<=>应该实现为成员函数还是自由函数?

注意:我认为这可能是问题的技术重复,但: C++20中对==的更改相当激进,我不确定重新唤起9年前的问题是否合适。 我特别询问编译器正在重写的运算符==和&lt;=&gt;,而不是例如运算符&lt;。 p.s.目前我有自己的观点(基于foonathan的一些讨论),但这只是当前的偏好,...

62得票3回答
三路比较运算符和减法有何不同?

C++20中引入了新的比较运算符&lt;=&gt;,但我认为在大多数情况下,简单的减法运算就可以胜任: 有一个新的比较运算符&lt;=&gt;,但是我认为在大多数情况下使用简单的减法即可。int my_strcmp(const char *a, const char *b) { wh...

16得票4回答
为什么在Ruby中sort或太空船(飞碟)运算符(<=>)不能用于布尔值?

在"Is it possible to sort a list of objects depending on if the individual object's response to a method?"这篇文章中,我发现飞碟在布尔值上无法正常工作。 考虑以下内容: Ruby 1.8...