6

语境

在阅读一致比较时,我注意到比较动词的特殊用法:

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

在互联网上找到的另一个例子(强调我的):

它返回一个在失败时比较小于零的值。否则,返回的值可以用作稍后调用 get 的第一个参数。

最后一个示例,可在 GitHub 上找到(重点是我的):

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

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

问题*

  • 编程术语句子“对象比较小于零”如何翻译成简单的英语
  • 这是否意味着如果将对象与结果进行比较,0结果将“小于零”?
  • 为什么说“对象小于零”而不是“对象比较小于零”是错误的?

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

4

6 回答 6

6

“比较<0”用简单的英语是“比较小于零”。

我相信这是一种常见的速记。

因此,将其应用于整个句子给出:

表达式 a <=> b 返回一个对象,如果 a 小于 b,则比较小于零,如果 a 大于 b,则比较大于零,如果 a 和 b 相等/等价,则比较等于零。

这真是一口。我可以理解为什么作者会选择使用符号。

于 2017-11-26T16:40:09.657 回答
3

更确切地说,我感兴趣的是“比较<0”的等效表达式。“比较<0”是否意味着“评估为负数”?

首先,我们需要了解您引用的内容与标准的实际措辞之间的区别。您引用的内容只是对实际纳入标准的解释。

P0515中语言功能的标准措辞operator<=>是它返回 5 种可能的类型之一。这些类型由P0768中的措辞定义。

这些类型不是整数。甚至枚举。它们是类类型。这意味着它们完全具有并且只有库为它们定义的操作。图书馆的措辞对它们非常具体:

比较类别类型的关系和相等友元函数使用未指定类型的匿名参数指定。此类型应由实现选择,以便这些参数可以接受文字0 作为相应的参数。[示例:nullptr_t满足此要求。— 结束示例] 在这种情况下,提供非文字参数的程序的行为0是未定义的。

因此,Herb 的文本被直接翻译成标准措辞:它比较小于 0。不多也不少。不是“是负数”;它是一种值类型,您唯一能做的就是将其与零进行比较。

重要的是要注意 Herb 的描述性文本“比较小于 0”如何转换为实际的标准文本。P0515 中的标准文本清楚地表明 的结果1 <=> 2strong_order::less。P0768 中的标准文本告诉我们这strong_order::less < 0是真的。

但它也告诉我们,所有其他比较都是描述性短语“比较小于 0”的功能等价物。

例如,如果 -1“比较小于 0”,那么这也意味着它不比较等于 0。并且它不会比较大于 0。这也意味着 0 不会比较小于 -1。等等。

strong_order::lessP0768 告诉我们,和字面量之间的关系0符合“比较小于 0”这个词的所有含义。

于 2017-11-26T19:41:53.807 回答
2

a比较小于零”意味着这a < 0是真的。

"a比较的== 0意思a == 0是真的。

其他表达我现在肯定是有道理的,对吧?

于 2017-11-26T19:57:07.540 回答
2

是的,“对象比较小于 0”意味着object < 0将产生true. 同样,compares equal to 0手段object == 0将产生真,compares greater than 0手段object > 0将产生真。

至于他为什么不使用“小于 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 `==`
};

[暂时,让我们假设这些friend template<...>东西都是合法的——我想你已经明白了基本的想法,无论如何)。

这根本不代表一个价值。它只是表示“如果与0相比,结果应该小于、等于还是大于”的结果。因此,它不是小于0,只是它产生truefalse与 0 比较时(但与另一个值比较时产生相同的结果)。

至于为<0真是否意味着>0并且==0必须为假(反之亦然):对于运算符本身的返回类型没有这样的限制。该语言甚至不包括指定或强制执行此类要求的方法。规范中没有任何内容可以阻止它们全部返回true。返回true所有的比较是可能的,似乎是允许的,但这可能有点牵强。

尽管返回false所有这些是完全合理的——例如,与浮点 NaN 的任何和所有比较通常都应该返回false。NaN 表示“不是数字”,不是数字的东西不小于、等于大于数字。两者是无与伦比的,因此在每种情况下,答案都是(非常正确地)错误的。

于 2017-11-28T06:41:18.927 回答
1

我认为到目前为止的其他答案主要回答了操作的结果是什么,现在应该很清楚了。@VTT 的答案解释得最好,IMO。

然而,到目前为止,还没有人回答它背后的英语。“对象比较小于零。” 根本不是标准的英语,充其量是行话或俚语。这让非母语人士更加困惑。

等价物是:
使用 <0(小于零)的对象比较总是返回 true。

这很长,所以我可以理解为什么要创建“快捷方式”:
对象比较小于零。

于 2017-11-30T08:38:10.057 回答
0

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

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

如果 a==b,则表达式的计算结果为 0

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

于 2017-11-26T17:02:36.423 回答