相关疑难解决方法(0)

什么是C++中的<=>运算符?

当我试图了解C++运算符时,我偶然发现cppreference.com上的一个奇怪的比较运算符,*在一个如下所示的表中:

在此输入图像描述

"好吧,如果这些是C++中常见的操作符,我会更好地学习它们",我想.但我所有试图阐明这个谜团的尝试都没有成功.即使在这里,在Stack Overflow上我的搜索也没有运气.

<=>C++之间是否存在联系?

如果有的话,这个运营商到底做了什么?

*与此同时,cppreference.com更新了该页面,现在包含有关<=>运营商的信息.

c++ operators c++-faq spaceship-operator c++20

200
推荐指数
5
解决办法
3万
查看次数

为什么默认的三向运算符 (spaceship &lt;=&gt;) 生成相等运算符 (==) 而用户定义的三向运算符不生成?

考虑这个代码:

#include <iostream>
#include <compare>

class A {
public:
  int i = {};

  std::strong_ordering operator<=> (A const& r) const
  {
    return i <=> r.i;
  }
};

void TestA()
{
    A a;
    A b;

    std::cout<< (a<b);    
    std::cout<< (a>b);
    std::cout<< (a<=b);
    std::cout<< (a>=b);
    //std::cout<< (a==b); //ERROR
    std::cout << 'E';
    //std::cout<< (a!=b); //ERROR
    std::cout << 'E';
    std::cout<< std::is_eq(a<=>b);
    std::cout<< std::is_neq(a<=>b) << std::endl;
}

class B {
public:
  int i = {};

  std::strong_ordering operator<=> (B const& r) const = default;

};


void TestB()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading spaceship-operator c++20

2
推荐指数
1
解决办法
209
查看次数