是什么使某些命名函数/运算符与众不同?

Rekkalmd

关于某些C ++ 20功能的文档,我在<compare>标题下划线了一些命名的函数和运算符,如下所示

  constexpr bool is_eq  (partial_ordering cmp) noexcept { return cmp == 0; }
  constexpr bool is_neq (partial_ordering cmp) noexcept { return cmp != 0; }
  constexpr bool is_lt  (partial_ordering cmp) noexcept { return cmp < 0; }
  constexpr bool is_lteq(partial_ordering cmp) noexcept { return cmp <= 0; }
  constexpr bool is_gt  (partial_ordering cmp) noexcept { return cmp > 0; }
  constexpr bool is_gteq(partial_ordering cmp) noexcept { return cmp >= 0; }

根据<utility>

template< class T, class U >
constexpr bool cmp_greater_equal( T t, U u ) noexcept
{
    return !cmp_less(u, t);
}

template< class T, class U >
constexpr bool cmp_less_equal( T t, U u ) noexcept
{
    return !cmp_greater(t, u);
}

我们应该了解自定义比较器(或简单比较器)与这些功能之间的区别吗?他们有什么特别之处?

讲故事的人-Unslander Monica

第一组功能是C ++ 20中添加的飞船运算符<=>的库支持的一部分这些实用程序适用于<=>直接使用而不是通过核心语言隐式使用的情况。

一方面,飞船的工作方式是返回一个可以与进行比较的对象0,从而发出两个对象之间的顺序关系。

  • (a <=> b) == 0 iff a == b
  • (a <=> b) < 0 iff a < b
  • 等等

现在,如果您发现自己a <=> b直接使用或从其他来源处理结果对象,则可以进行比较0以检查所需的关系。但是,可以说所得到的代码并不是最显而易见的代码。

因此,这些实用程序将添加到库中。它们在那里使代码更具表现力。它们使我们能够编写is_eq(a <=> b)is_lt(a <=> b)查询三向比较的含义。我认为与直接比较相比,它传达的意图要清晰得多0同样,只有在极少数情况下,我们可能需要<=>直接处理结果时,它才可用


另一组功能用于另一个目的。直接比较整数时,操作数会经历某些整数提升。因此,的结果-1 < 0u有点不直观false这是因为-1在比较之前将其提升为无符号整数(因为0u是无符号整数文字)。这回绕成一个非常大的无符号数字,该数字当然不少于0。

为了更好地支持混合比较,添加了这些功能。他们检查了涉及的类型,并在给定涉及的值的情况下给出了数学上正确的结果,而不会由于整数提升过程中发生的值转换而被忽视。与通过比较直接比较<std::cmp_less(-1, 0u)返回true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

此运算符重载函数重载是什么?

来自分类Dev

“&^”运算符是什么意思?

来自分类Dev

%=运算符的作用是什么?

来自分类Dev

<>运算符是什么意思

来自分类Dev

PowerShell中的“>”运算符是什么?

来自分类Dev

“?:”运算符PHP的含义是什么

来自分类Dev

序言中的“->”运算符是什么?

来自分类Dev

Unix中的“ ./”运算符是什么?

来自分类Dev

&^运算符的作用是什么?

来自分类Dev

Golang中的“&^”运算符是什么?

来自分类Dev

运算符?=是什么意思?

来自分类Dev

这个运算符是什么?在Dart?

来自分类Dev

Elm的余数运算符是什么

来自分类Dev

序言中的“->”运算符是什么?

来自分类Dev

&运算符是什么意思?

来自分类Dev

HTML中的“:”运算符是什么?

来自分类Dev

Ruby是什么**运算符

来自分类Dev

运算符?=是什么意思?

来自分类Dev

JavaScript中的%运算符是什么?

来自分类Dev

Python运算符ilshift(<< =)是什么?

来自分类Dev

@运算符的意义是什么?

来自分类Dev

使用'<'运算符而不是'=='运算符的std :: set <Key,Compare,Allocator> :: find()函数背后的直觉是什么?

来自分类Dev

为什么某些表达式的sizeof运算符工作方式不同?

来自分类Dev

C ++ +运算符的用法是什么?目的是什么?

来自分类Dev

C ++:具有不同数据类型的赋值运算符的名称是什么

来自分类Dev

Scala函数文字中=>(向右双箭头)运算符的链接是什么意思?

来自分类Dev

数据构造函数中的运算符(:>)是什么意思?

来自分类Dev

是什么决定调用构造函数还是强制转换运算符?

来自分类Dev

连接运算符在 INSTR 函数中的作用是什么?

Related 相关文章

热门标签

归档