问题标签 [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.
c++ - 比较运算符与三向运算符的嵌套生成?
考虑以下两个重载operator<=>
:S
如果我将一个对象S
与 进行比较int
,则会为我生成正确的运算符,所以像, or#1
这样的表达式就可以了。S{} <= 0
0 < 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
实际存在。为什么这里没有发生操作符的嵌套生成?标准是怎么说的?是否存在静态约束违规?
c++ - 为异构宇宙飞船运算符定义综合了哪些相等/比较运算符?
C++20 引入了新的 spaceship 运算符<=>
,它允许基于三向比较的排序强度综合相等和比较运算符。
但是,似乎在使用以下执行异构比较的简单玩具示例时,它无法合成相等运算符 - 但仍然成功合成排序运算符 - 尽管有std::strong_ordering
:
在 GCC 上,这会产生以下错误:
从我从cppreference可以看出,强序的自动合成运算符<=>
应该包括相等性——但是这似乎不是异类比较的情况,而是同质比较。
gcc
这在,甚至 MSVC 上都失败了clang
——所以我很确定这是正确的行为,尽管出乎意料。我知道这也可以通过定义自定义来解决operator==
,但我的问题主要是为什么首先会发生这种情况,以及我可以期望从异构operator<=>
定义中生成什么?
c++ - 为什么要使用三向比较运算符 (<=>) 而不是双向比较运算符?这有优势吗?
输出:
结构 std::partial_ordering
结构 std::strong_ordering
我知道如果操作数具有整数类型,则运算符返回类型为PRvaluestd::strong_ordering
。我还知道操作数是否具有浮点类型,该运算符会产生一个PRvalue类型std::partial_ordering
。
但是为什么我应该使用三路比较运算符而不是二路运算符(==
, !=
, <
, <=
, >
, >=
)?这对我有好处吗?
c++ - 递归宇宙飞船算子
我写了这个简单的代码,但它没有编译,因为比较被隐式删除了。
任何人都可以向我解释如何解决这个问题,或者至少为什么它不起作用?
编辑:用“g++ -std=gnu++2a main.cpp”编译编辑2:这是输出的错误部分(后面是很多很多行候选):
c++ - C ++宇宙飞船运算符多级比较?
新的 C++20 宇宙飞船运算符是否允许以简洁的方式表达短路的多标准比较?比这更好的东西:
c++ - 当 'operator <=>' 足够时,为什么我必须提供 'operator =='?
见在线演示
为什么我必须提供 足够的时间operator ==
? operator <=>
c++ - c++20中的这个模板代码有什么问题
模板问题;第一个是包含模板及其定义的头文件,Visual Studio 2019 没有显示 /C++lastest 功能(c++20)的警告
波纹管只是解决方案
我只是无法编译,它显示了这个“错误 C2098 数据成员 '<=' 后的意外令牌”,它指向这一行“auto operator<=>(const Pair& other) const = default;”。我已经阅读了有关操作的 cpp++ 参考<<。是模板错误还是有什么问题?谢谢
c++ - 是否可以在 c++20 中使用比较运算符在枚举值之间建立小于大于排序关系
如果我们有这样的枚举类
是否可以实现一个运算符,在字母表中的字母之间建立排序关系,使得
小于比较将评估为真。我对此的平庸理解是枚举是部分排序。为代码中的错误道歉。考虑这个问题
spaceship-operator - 宇宙飞船运算符<=>第一次出现是什么时候?
许多计算机编程语言包括宇宙飞船运算符<=>。
我想知道哪种计算机编程语言首先包含它,什么时候包含它。