"compares less than 0" 的意思是什么?

6

背景

当我阅读一致的比较时,我注意到动词“比较”的一个奇特用法:

有一个新的三路比较运算符<=>。表达式a <=> b返回一个对象,如果a < b则比较<0,如果a > b则比较>0,并且如果ab相等/等效,则比较==0

以下是在互联网上找到的另一个例子(重点是我的):

如果失败,则返回一个比零小的值。否则,返回的值可以作为稍后调用get时的第一个参数。

最后一个example在GitHub上找到(重点是我的):

//执行循环16位比较。
//如果两个数字之间的距离大于32767,并且数字大于32768,则减去65536
//因此,65535 比0小,但大于65534
//这正确处理了65535-> 0包装情况

当然,对于有经验的程序员来说,意思是清楚的。但是,在这些示例中使用动词“比较”的方式不符合任何标准化的英语形式。

问题*

  • 编程术语jargon句子"The object compares less than zero"如何用通俗易懂的英语表达?
  • 它是否意味着,如果将对象与0进行比较,则结果将是"小于零"?
  • 为什么说"对象零小"而不是"对象小于零"是错误的?

* 我在英语学习者英语语言与用法上寻求帮助。


9
“Compares less than zero”这句话绝对不是‘平易近人的英语’。 这个“compare”的意思通常需要一个语义多价结构(可以通过复数主语,复数宾语或带有强制谓语补语的单数宾语表达)。虽然在某些程序员中可能会术语化地以这种单价方式使用,但这并不使其成为平易近人的英语。“X compares less than zero”对大多数普通英语说话者来说没有任何意义,就像“My new car compares 55”一样。 - Janus Bahs Jacquet
3
@NicolBolas 不,不是这样的。这是完全正常的、多价用法(虽然我在第一条评论中忘了指定结构:必须使用单数主语和强制 PC)。有两个语义动词补语,其中一个表达为 PP。首先,在这里引用的情况并不是“没有宾语”的用法:有一个宾语,即“less than”。有一个单数主语和一个单数宾语——仅此而已。这对于“compare”来说不是一个正常的结构。你举的一个平行的例子是,“他的独奏肯定比去年的好。” - Janus Bahs Jacquet
2
@Nicol 仍然不行。首先,这将是一个非常不寻常的使用“小于”。更重要的是,通常无论是否有任何副词(如“消极地”或者如果我们接受它,“小于”),你都会比较X和Y。在演奏例子中,你重新加入了“与”的内容,而这在C++的例子中并不存在——这就是使它如此奇怪的原因。“他的演奏与他去年的演奏相比表现不佳”仍然没有意义。“如果a < b,则比零小的对象”也没有意义。它们是完全不同且无法比较的结构。 - Janus Bahs Jacquet
2
@JanusBahsJacquet:“更重要的是,通常你会将X与Y进行比较,而不管是否有任何副词(如负面或者如果我们接受它,则为小于)。我认为“小于”既可以作为副词,也可以作为“与/和”的意思。短语“小于”已经预设了后面有一个对象;没有必要再添加“与/和”。虽然你可能“通常”需要“与/和”,但在这种情况下你不需要。” - Nicol Bolas
3
正是因为这种前提假设无法从标准英语中的“less than”这样的短语中推断出来,所以它才成为行话。这种用法很可能已经被确认为C++行话——但它是行话,而不是标准/普通英语。如果我正确地理解了你的回答,一个更符合标准英语的重新表述应该是“一个对象,如果与0进行比较,如果a<b,则返回/评估为小于零的值”,对吗? - Janus Bahs Jacquet
显示剩余7条评论
6个回答

6
"<0" 的英文意思是“less than zero”(小于零)。这是一种常见的简写方式。因此,将其应用到整个句子中得到以下结果:“表达式 a <=> b 返回一个对象,如果 a 小于 b,则比较结果小于零;如果 a 大于 b,则比较结果大于零;如果 a 和 b 相等/等效,则比较结果等于零。” 这句话有点啰嗦。我可以理解为什么作者会选择使用符号。

4
我感兴趣的更确切地说,是“compares <0”的等价表达式。 “compares <0”是否意味着“评估为负数”?首先,我们需要了解您引用的内容与标准实际措辞之间的区别。您引用的只是将实际放入标准中的解释。语言特性operator<=>的标准措辞在P0515中,它返回5种可能的类型之一。这些类型由P0768中的库措辞定义。这些类型不是整数,甚至不是枚举类型。它们是类类型。这意味着它们仅具有库为其定义的操作。库措辞非常明确:
比较类别类型的关系和相等友元函数使用未指定类型的匿名参数进行指定。该实现应选择此类型,以便这些参数可以接受文字“0”作为相应参数。[例如:nullptr_t满足此要求。-- 结束示例]在这种情况下,提供除文字“0”之外的参数的程序的行为是未定义的。
因此,Herb的文本直接翻译成标准措辞:它“小于0”。没有更多,也没有更少。不是“负数”; 它是一个值类型,在其中您唯一能做的就是将其与零进行比较。
重要的是要注意Herb的描述性文本“小于0”如何转换为实际标准文本。 P0515中的标准文本清楚地表明1 <=> 2的结果为strong_order::less。而P0768中的标准文本告诉我们strong_order::less < 0为真。
但它也告诉我们,所有其他比较都等同于描述性短语“小于0”。例如,如果-1“小于0”,那么这也意味着它不等于零。它也不大于0。这也意味着0不小于-1。P0768告诉我们,strong_order :: less和文字0之间的关系符合“小于0”的所有含义。

1
@q-l-p:...我不知道怎样才能更清楚。类类型默认情况下没有比较运算符定义;它们必须为它们定义。由于这些类型是由标准库定义的,所以标准库将定义它们。 - Nicol Bolas
1
@q-l-p: 什么意思是说一个整数比零小?你可能认为它是负数,但你的思维还不够基本。"Object compares less than zero"指的是 object < 0 == true。但它也意味着 object > 0 == false。以及 (object == 0) == false - Nicol Bolas
1
啊!你在非及物意义上使用“compare”,与“compares unfavourably”平行!难怪我、@q-l-p和Janus Bahs Jacquet都不理解。问题是,在普通英语中,“less than zero”不可能作为这样的状语补语出现。我同意这是一个有用的表达,但我不认为它是简单明了的英语。它是行话。 - Colin Fine
2
@ColinFine:这可能意味着该对象在某种程度上是“负面的”。但它并不是。 - Nicol Bolas
1
@ColinFine 实际上,“is negative”是数学中的术语,仅适用于具有某些属性的某些数学对象(例如数字)。我们不能在这里称其为负数,因为我们所讨论的计算机对象与那些数学概念不相似。 - user2486888
显示剩余8条评论

2
是的,“对象比0小”意味着object < 0将产生true。同样,“等于0”意味着object == 0将产生true,“大于0”意味着object > 0将产生true。
至于为什么他不使用“小于0”的短语,我猜想这是为了强调这是保证的全部内容。例如,这可以是任何任意类型,包括不真正表示实际值,而只支持与0进行比较的类型。
举个例子,让我们考虑一种类型,类似于这样:
class comparison_result {
    enum { LT, GT, EQ } res; 

    friend template <class Integer>
    bool operator<(comparison_result c, Integer) { return c.res == LT; }

    friend template <class Integer>
    bool operator<(Integer, comparison_result c) { return c.res == GT; }

    // and similarly for `>` and `==`
};
< p >【暂时假设friend template<...>是合法的——无论如何,我认为你已经基本明白了】

这实际上并不代表任何值。它只代表“如果与0比较,结果应该小于、等于还是大于”。因此,它并不是小于0,只是在与0比较时产生truefalse的结果(但在与另一个值比较时产生相同的结果)。

至于<0为真是否意味着>0==0必须为假(反之亦然):对于运算符本身的返回类型,并没有这样的限制。语言甚至没有一种方式来指定或强制执行这样的要求。规范中没有任何防止它们都返回true的内容。虽然可能性很小,但所有比较都返回true是可能的且似乎被允许的。

而对于所有比较都返回false则完全合理——例如,任何与浮点NaN进行比较的情况通常都应该返回false。NaN表示“不是数字”,而不是数字的东西既不小于、也不等于大于数字。两者是不可比较的,因此在每种情况下,答案都是(完全正确的)false。


我已经编辑了我的问题,希望更加清晰明了。您能否在您的回答中回答这些额外的问题? - q-l-p
@JerryCoffin: “关于 <0 为真是否意味着 >0 和 ==0 必须为假(反之亦然):对于运算符本身的返回类型没有这样的限制。” 这并不是正确的。在实际标准措辞中,P0768和P0515非常清楚地说明了对于该类型的任何值,这些条件中哪些将为真,哪些将为假。例如,partial_ordering::less将使>0变为false。这些类型的描述性文本中仅出现“compares <0”的短语。 - Nicol Bolas

2
"a比零小"意味着a < 0是真的。 "a== 0相比意味着a == 0是真的。 其他表达式现在应该很清楚了,对吧?

1
我认为到目前为止其他答案已经回答了操作的结果,现在应该很清楚了。 @VTT的答案在我看来最好解释了它。
然而,到目前为止没有人回答背后的英语语言。 "The object compares less than zero." 简单地说不是标准英语,充其量只是行话或俚语。这使得对非母语人士更加困惑。
一个等效的表达是:使用 <0(小于零)比较对象总是返回 true。
那太冗长了,所以我可以理解为什么会创建一个“快捷方式”:
The object compares less than zero.

你是在试图回答问题还是只是发表评论? - q-l-p
我来回答。既然您还没有接受@VTT的答案(该答案最好地解释了代码中发生的情况),我就假设您正在寻找英语语言的解释。所以...这就是您要的。 - TheSHEEEP

0

这意味着表达式将返回一个可与<0或>0或==0进行比较的对象。

如果a和b是整数,则如果a小于b,则表达式的值为负值(可能为-1)。

如果a==b,则表达式的值为0

如果a大于b,则表达式的值将为正值(可能为1)。


2
“我认为它意味着…”是发布答案的相当不充分的基础。 - Jesper Juhl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接