问题标签 [spaceship-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
168 浏览

c++ - 三路运算符 <=> 返回带有隐式转换函数的结构体

考虑以下无用的代码:

Clang 和 MSVC 接受此代码,但 GCC拒绝它并显示错误消息:

哪个编译器是对的?是如何operator<=合成的operator<=>

0 投票
1 回答
128 浏览

c++ - 比较运算符与三向运算符的嵌套生成?

考虑以下两个重载operator<=>S

如果我将一个对象S与 进行比较int,则会为我生成正确的运算符,所以像, or#1这样的表达式就可以S{} <= 00 < S{}0 <=> S{}

但是,如果我将一个对象S与其他对象进行比较S

那么这将被重写为(S{} <=> S{}) < 0. 既然(S{} <=> S{})会返回一个 other S,我们回到原点问题:S与 a 比较int。目前,我们没有operator<(S, int),因此#1将为我生成正确的运算符。

但令人惊讶的是,三个编译器都没有对我这样做。GCC、Clang 和 MSVC拒绝S{} < S{}并显示相同的错误消息:

这让我很沮丧。由于#1实际存在。为什么这里没有发生操作符的嵌套生成?标准是怎么说的?是否存在静态约束违规?

0 投票
0 回答
105 浏览

c++ - 为异构宇宙飞船运算符定义综合了哪些相等/比较运算符?

C++20 引入了新的 spaceship 运算符<=>,它允许基于三向比较的排序强度综合相等和比较运算符。

但是,似乎在使用以下执行异构比较的简单玩具示例时,它无法合成相等运算符 - 但仍然成功合成排序运算符 - 尽管有std::strong_ordering

在 GCC 上,这会产生以下错误:

Live Example

从我从cppreference可以看出,强序的自动合成运算符<=>应该包括相等性——但是这似乎不是异类比较的情况,而是同质比较。

gcc这在,甚至 MSVC 上都失败了clang——所以我很确定这是正确的行为,尽管出乎意料。我知道这也可以通过定义自定义来解决operator== 但我的问题主要是为什么首先会发生这种情况,以及我可以期望从异构operator<=>定义中生成什么?

0 投票
4 回答
644 浏览

c++ - 为什么要使用三向比较运算符 (<=>) 而不是双向比较运算符?这有优势吗?

输出:

结构 std::partial_ordering
结构 std::strong_ordering

我知道如果操作数具有整数类型,则运算符返回类型为PRvaluestd::strong_ordering。我还知道操作数是否具有浮点类型,该运算符会产生一个PRvalue类型std::partial_ordering

但是为什么我应该使用三路比较运算符而不是二路运算符(==, !=, <, <=, >, >=)?这对我有好处吗?

0 投票
1 回答
105 浏览

c++ - 递归宇宙飞船算子

我写了这个简单的代码,但它没有编译,因为比较被隐式删除了。

任何人都可以向我解释如何解决这个问题,或者至少为什么它不起作用?

编辑:用“g++ -std=gnu++2a main.cpp”编译编辑2:这是输出的错误部分(后面是很多很多行候选):

0 投票
1 回答
128 浏览

c++ - C ++宇宙飞船运算符多级比较?

新的 C++20 宇宙飞船运算符是否允许以简洁的方式表达短路的多标准比较?比这更好的东西:

0 投票
5 回答
5342 浏览

c++ - 当 'operator <=>' 足够时,为什么我必须提供 'operator =='?

在线演示

为什么我必须提供 足够的时间operator == operator <=>

0 投票
0 回答
97 浏览

c++ - c++20中的这个模板代码有什么问题

模板问题;第一个是包含模板及其定义的头文件,Visual Studio 2019 没有显示 /C++lastest 功能(c++20)的警告

波纹管只是解决方案

我只是无法编译,它显示了这个“错误 C2098 数据成员 '<=' 后的意外令牌”,它指向这一行“auto operator<=>(const Pair& other) const = default;”。我已经阅读了有关操作的 cpp++ 参考<<。是模板错误还是有什么问题?谢谢

0 投票
1 回答
185 浏览

c++ - 是否可以在 c++20 中使用比较运算符在枚举值之间建立小于大于排序关系

如果我们有这样的枚举类

是否可以实现一个运算符,在字母表中的字母之间建立排序关系,使得

小于比较将评估为真。我对此的平庸理解是枚举是部分排序。为代码中的错误道歉。考虑这个问题

0 投票
0 回答
14 浏览

spaceship-operator - 宇宙飞船运算符<=>第一次出现是什么时候?

许多计算机编程语言包括宇宙飞船运算符<=>。

我想知道哪种计算机编程语言首先包含它,什么时候包含它。