问题标签 [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 投票
3 回答
11956 浏览

c++ - 三向比较运算符与减法有何不同?

C++20 中有一个新的比较运算符<=>。但是我认为在大多数情况下,简单的减法效果很好:

它们具有相同的效果。我真的无法理解其中的区别。

0 投票
3 回答
3233 浏览

c++ - 三向比较运算符总是有效的吗?

Herb Sutter 在他对“宇宙飞船”操作员的提议(第 2.2.2 节,第 12 页底部)中说:

基于所有内容<=>及其返回类型:此模型具有主要优势,与以前的 C++ 提案和其他语言的功能相比,此提案有一些独特之处:

[...]

(6)效率,包括最终实现比较的零开销抽象:绝大多数比较总是单通的。唯一的例外是在同时支持部分排序​​和相等的类型的情况下<=生成。>=For <,single-pass 对于实现零开销原则以避免重复相等比较是必不可少的,例如 for struct Employee { string name; /*more members*/ };used in struct 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.

我在这里错过了什么吗?

0 投票
2 回答
286 浏览

arrays - 为 Array 类创建自己的冒泡排序方法时遇到问题

我完全理解冒泡排序的工作原理。只是给了我一个编码练习,我必须创建一个猴子修补到 Array 类的方法,其中使用了一个代码块并且它具有 spaceship 运算符。下面是我的代码:

这是我的方法,但我不知道如何在块内使用bubble_sort!“宇宙飞船操作员”来编写它。<=>练习希望我能够将块{|num1,num2| num1 <=> num2}升序和{|num1,num2| num2 <=> num1}降序传递到方法中。我调用一个块没有问题,而且我理解宇宙飞船操作员如何比较它的变量< == -1,= == 0> == 1. 我唯一的问题是我不知道如何将其写入冒泡排序的实际条件语句中。

0 投票
0 回答
33 浏览

php - 宇宙飞船操作员

我有一个用于执行某些任务的 PHP 页面。此页面每分钟重新加载一次。除了这个页面,它还与另外两个页面和一个数据库一起工作。其他两个页面根据主页显示结果。

我正在尝试将这些页面/数据库(应用程序)从我的主要业务服务器移动到另一台服务器(因为它会在我开发时使我的服务器崩溃)。

我把所有东西都移到了新主机上(同一主机、aiso.net、新计划),一切似乎都运行良好。两个显示页面与数据库连接并且运行良好。但是,重新加载的主页会产生错误:

解析错误:语法错误,意外的“>”

导致错误的页面部分是这样的:

我检查以确保两个托管计划之间的所有 PHP 设置都相同。

我无法弄清楚为什么 <=> 运算符在一台主机上工作正常,但在另一台主机上(具有相同的设置),该运算符会导致错误。

0 投票
1 回答
1153 浏览

c++ - <=> 在 c++20 之前的代码中的合法出现

在 wandbox 中四处乱逛,我发现如果 clang 看到<=>出现在 C++17 或更早版本中,它实际上会发出警告。

我试图弄清楚如何<=>在 C++17 中编写一个合法的字符序列用例,但我想出的东西都觉得很做作。最可能的示例(imo)涉及使用模板:

活生生的例子

其他一切仍然涉及通过 name 明确提及比较函数operator<=。是否有更常见的外观<=>,我无法想象这会促使 clang 开发人员添加此警告?

0 投票
1 回答
8694 浏览

c++ - 为什么我们需要 C++ 中的 spaceship <=> 运算符?

为什么我们在 C++ 中需要这样的运算符,它在现代 C++ 编程中有何用处?任何可以应用的真实世界代码示例都会有所帮助。

这个问题旨在了解现实世界中的实际应用,而无需阅读 Herb Sutter 的冗长建议。不过,没有冒犯该提案。

0 投票
2 回答
831 浏览

c++ - std::strong_ordering 和 std::weak_ordering 的实际意义

我一直在阅读有关 C++20 的一致比较(即operator<=>)的一些内容,但无法理解std::strong_ordering和之间的实际区别是什么std::weak_ordering_equality这种方式的版本也是如此)。
除了对类型的可替代性进行非常详细的描述之外,它实际上是否会影响生成的代码?它是否为如何使用该类型添加了任何约束?
希望看到一个真实的例子来证明这一点。

0 投票
2 回答
70 浏览

arrays - 在 Rby 中以相反的顺序对数组进行排序

我是 Ruby 新手,需要向我解释一段代码。要排序的数组是这个:

下面的代码块对这个数组booksAZ 进行排序

下面的代码块对这个数组booksZA 进行排序

为什么是这样?为什么第一个排序 AZ 而第二个排序 ZA?我有点理解组合比较运算符<=>。它根据比较返回 -1、1 或 0。但是这是如何排序的呢?谢谢!

0 投票
4 回答
237 浏览

perl - Perl 词法分析器:为什么在 <=><=><=> 的上下文中使用 "<=>" eq "="?

我只是在阅读秘密伪常数,即太空舰队常数

这似乎是因为外部<=>正在做一些我不明白的事情。我的问题是为什么

设置$foo=? 其他非字母数字似乎也可以,

但是,字母数字不...

此外,吊舱perlsecret让我感到困惑

尽管它看起来像是由三个飞船操作员组成的序列,但只有中间的飞船才是真正的飞船。两个外层的“宇宙飞船”实际上是对glob("=").

情况似乎也不是这样,因为我无法理解为什么glob("=")会返回=,但glob("a")会返回undef——即使a在当前工作目录中调用了一个文件。

Perl 在这两种情况下都在做什么?<>如果里面的东西不是字母数字,我认为它会退回到文字- 是否支持这种行为?

0 投票
0 回答
62 浏览

android - 如何制作类似于 Ruby <=> 的运算符(又名:spaceship)

我在下面有一个使用 swift 并使用 <=> 的示例代码,我想将其转换为 android,但我不知道该怎么做。我想使用 java 将以下示例转换为 android。一些提示或示例会很棒!我很想听听你的意见。