问题标签 [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++ - 三向比较运算符与减法有何不同?
C++20 中有一个新的比较运算符<=>
。但是我认为在大多数情况下,简单的减法效果很好:
它们具有相同的效果。我真的无法理解其中的区别。
c++ - 三向比较运算符总是有效的吗?
Herb Sutter 在他对“宇宙飞船”操作员的提议(第 2.2.2 节,第 12 页底部)中说:
基于所有内容
<=>
及其返回类型:此模型具有主要优势,与以前的 C++ 提案和其他语言的功能相比,此提案有一些独特之处:[...]
(6)效率,包括最终实现比较的零开销抽象:绝大多数比较总是单通的。唯一的例外是在同时支持部分排序和相等的类型的情况下
<=
生成。>=
For<
,single-pass 对于实现零开销原则以避免重复相等比较是必不可少的,例如 forstruct Employee { string name; /*more members*/ };
used instruct Outer { Employeee; /*more members*/ };
- 今天的比较违反了零开销抽象,因为operator<
onOuter
执行冗余相等比较,因为它执行if (e != that.e) return e < that.e;
遍历相等前缀e.name
两次(如果名称相等,则遍历其他成员的相等前缀Employee
两倍),这通常不能被优化掉。正如 Kamiński 所指出的,零开销抽象是 C++ 的支柱,第一次实现它以进行比较是这种基于<=>
.
但随后他给出了这个例子(第 1.4.5 节,第 6 页):
会定义operator>(a,b)
为a<=>b > 0
不会导致大量开销吗?(尽管形式与他讨论的不同)。该代码将首先测试是否相等,然后测试 ,less
最后greater
测试 ,而不是仅直接测试greater
.
我在这里错过了什么吗?
arrays - 为 Array 类创建自己的冒泡排序方法时遇到问题
我完全理解冒泡排序的工作原理。只是给了我一个编码练习,我必须创建一个猴子修补到 Array 类的方法,其中使用了一个代码块并且它具有 spaceship 运算符。下面是我的代码:
这是我的方法,但我不知道如何在块内使用bubble_sort!
“宇宙飞船操作员”来编写它。<=>
练习希望我能够将块{|num1,num2| num1 <=> num2}
升序和{|num1,num2| num2 <=> num1}
降序传递到方法中。我调用一个块没有问题,而且我理解宇宙飞船操作员如何比较它的变量< == -1
,= == 0
和> == 1
. 我唯一的问题是我不知道如何将其写入冒泡排序的实际条件语句中。
php - 宇宙飞船操作员
我有一个用于执行某些任务的 PHP 页面。此页面每分钟重新加载一次。除了这个页面,它还与另外两个页面和一个数据库一起工作。其他两个页面根据主页显示结果。
我正在尝试将这些页面/数据库(应用程序)从我的主要业务服务器移动到另一台服务器(因为它会在我开发时使我的服务器崩溃)。
我把所有东西都移到了新主机上(同一主机、aiso.net、新计划),一切似乎都运行良好。两个显示页面与数据库连接并且运行良好。但是,重新加载的主页会产生错误:
解析错误:语法错误,意外的“>”
导致错误的页面部分是这样的:
我检查以确保两个托管计划之间的所有 PHP 设置都相同。
我无法弄清楚为什么 <=> 运算符在一台主机上工作正常,但在另一台主机上(具有相同的设置),该运算符会导致错误。
c++ - 为什么我们需要 C++ 中的 spaceship <=> 运算符?
为什么我们在 C++ 中需要这样的运算符,它在现代 C++ 编程中有何用处?任何可以应用的真实世界代码示例都会有所帮助。
这个问题旨在了解现实世界中的实际应用,而无需阅读 Herb Sutter 的冗长建议。不过,没有冒犯该提案。
c++ - std::strong_ordering 和 std::weak_ordering 的实际意义
我一直在阅读有关 C++20 的一致比较(即operator<=>
)的一些内容,但无法理解std::strong_ordering
和之间的实际区别是什么std::weak_ordering
(_equality
这种方式的版本也是如此)。
除了对类型的可替代性进行非常详细的描述之外,它实际上是否会影响生成的代码?它是否为如何使用该类型添加了任何约束?
希望看到一个真实的例子来证明这一点。
arrays - 在 Rby 中以相反的顺序对数组进行排序
我是 Ruby 新手,需要向我解释一段代码。要排序的数组是这个:
下面的代码块对这个数组books
AZ 进行排序
下面的代码块对这个数组books
ZA 进行排序
为什么是这样?为什么第一个排序 AZ 而第二个排序 ZA?我有点理解组合比较运算符<=>
。它根据比较返回 -1、1 或 0。但是这是如何排序的呢?谢谢!
perl - Perl 词法分析器:为什么在 <=><=><=> 的上下文中使用 "<=>" eq "="?
我只是在阅读秘密伪常数,即太空舰队常数
这似乎是因为外部<=>
正在做一些我不明白的事情。我的问题是为什么
设置$foo
为=
? 其他非字母数字似乎也可以,
但是,字母数字不...
尽管它看起来像是由三个飞船操作员组成的序列,但只有中间的飞船才是真正的飞船。两个外层的“宇宙飞船”实际上是对
glob("=")
.
情况似乎也不是这样,因为我无法理解为什么glob("=")
会返回=
,但glob("a")
会返回undef
——即使a
在当前工作目录中调用了一个文件。
Perl 在这两种情况下都在做什么?<>
如果里面的东西不是字母数字,我认为它会退回到文字- 是否支持这种行为?
android - 如何制作类似于 Ruby <=> 的运算符(又名:spaceship)
我在下面有一个使用 swift 并使用 <=> 的示例代码,我想将其转换为 android,但我不知道该怎么做。我想使用 java 将以下示例转换为 android。一些提示或示例会很棒!我很想听听你的意见。