当前位置: 首页 > 知识库问答 >
问题:

在C++20中,非默认运算符不生成==和!=

梁丘高朗
2023-03-14
#include <compare>

struct X
{
    int Dummy = 0;
    auto operator<=>(const X&) const = default; // Default implementation
};

int main()
{
    X a, b;

    a == b; // OK!

    return 0;
}
struct X
{
    int Dummy = 0;
    auto operator<=>(const X& other) const
    {
        return Dummy <=> other.Dummy;
    }
};

共有1个答案

秦景同
2023-03-14

这是设计好的。

[class.compare.default](强调是我的)

3如果类定义没有显式声明==运算符函数,而是声明默认的三向比较运算符函数,则隐式声明==运算符函数,其访问权限与三向比较运算符函数相同。类X的隐式声明的==运算符是内联成员,在X的定义中定义为默认值。

 类似资料:
  • 首先,我想问为什么默认三向运算符的行为不同于用户定义运算符? 其次,这个问题的解决方案对于类是正确的,还是应该以不同的方式处理? 这只是一个简单的例子,我想到了更复杂的情况,有几十个字段和联合(如果您不知道我的意思,请查看一些Intel API;))。 我稍微修改了示例中的类,以便更多地描述实际生活中的问题(当默认运算符不是有效的解决方案时)。我还想澄清,我想知道这些差异背后的原因(用户定义和默认

  • 本文向大家介绍C++中的四个默认成员函数与运算符重载详解,包括了C++中的四个默认成员函数与运算符重载详解的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍了关于C++默认成员函数与运算符重载的相关内容,分享出来公的敬爱啊参考学习,话不多说,来一起看看详细的介绍: 一:类和对象的基础知识:类的定义,访问限定符,面向对象封装性,对象的大小计算等等。(编译环境为VS2015) 面向对象程序设

  • C++ 运算符 .(点)运算符和 ->(箭头)运算符用于引用类、结构和共用体的成员。 点运算符应用于实际的对象。箭头运算符与一个指向对象的指针一起使用。例如,假设有下面的结构: struct Employee { char first_name[16]; int age; } emp; (.)点运算符 下面的代码把值 "zara" 赋给对象 emp 的 first_name 成员:

  • 在下面的代码中,我为数组下标运算符提供了默认参数。 但是,编译器生成了一个错误: 但是,如果我为函数调用操作符提供默认参数。 很好用。 所以,我有一个问题: 为什么不允许数组下标运算符的默认参数

  • 我的api如下所示: 对于查询,我们只想允许查询枚举中列出的某些属性,如下所示: 我加了 在启动阶段。cs,但这不适用于默认值,我得到以下生成的虚张声势,默认值为0而不是字符串: 如何使默认值显示为字符串?

  • 我的API定义如下: 我们使用生成代码。 生成的API参数: