【发布时间】:2018-06-11 02:17:58
【问题描述】:
C++20 中有一个新的比较运算符<=>。但是我认为在大多数情况下,简单的减法效果很好:
int my_strcmp(const char *a, const char *b) {
while (*a == *b && *a != 0 && *b != 0) {
a++, b++;
}
// Version 1
return *a - *b;
// Version 2
return *a <=> *b;
// Version 3
return ((*a > *b) - (*a < *b));
}
它们具有相同的效果。我真的无法理解其中的区别。
【问题讨论】:
-
整数减法是执行三向比较的老方法,但它可能会溢出。它也不适用于无符号类型总是。另一种方法是 ((*a > *b) - (*a
-
甚至有人谈到允许任何具有默认
<=>的类型作为非类型模板参数。该运算符的后果不仅仅是替代仅对算术类型“有效”的一种运算。 -
@iBug:那么……对于不是字符数组的事物进行三向比较,你到底打算做什么?
-
正如您所说,在大多数情况下,简单的减法效果很好。其他情况呢?
-
@wvxvw 你是说
(2 ** (sizeof(char) * CHAR_BIT))吗?
标签: c++ comparison-operators c++20 spaceship-operator