Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ != 在C++;20?_C++_Operator Overloading_Comparison_C++20_Comparison Operators - Fatal编程技术网

C++ != 在C++;20?

C++ != 在C++;20?,c++,operator-overloading,comparison,c++20,comparison-operators,C++,Operator Overloading,Comparison,C++20,Comparison Operators,这是C++20中的标准行为吗?我在参考资料中找不到关于它的任何东西 我刚刚在Clang和VisualStudio上都试过了,它工作正常,没有给我任何错误或警告。我还检查了调试器,查看是否调用了操作符==,并且它是!C++20现在是否允许自动生成运算符=当操作员==存在时?它是否默认为正常的!(a==b)?如果是这样,那对C++来说是非常棒的!p> =从C++20中的==自动生成 这是C++20中的标准行为吗 对操作员=是由C++20中的操作符==自动生成的 此外,如果定义了运算符,则会生成所有四

这是C++20中的标准行为吗?我在参考资料中找不到关于它的任何东西

我刚刚在Clang和VisualStudio上都试过了,它工作正常,没有给我任何错误或警告。我还检查了调试器,查看是否调用了
操作符==
,并且它是!C++20现在是否允许自动生成
运算符=当操作员==
存在时?它是否默认为正常的
!(a==b)
?如果是这样,那对C++来说是非常棒的!p>
=从C++20中的
==
自动生成

这是C++20中的标准行为吗

对<代码>操作员=是由C++20中的
操作符==
自动生成的

此外,如果定义了
运算符
,则会生成所有四个关系运算符,如果将
运算符
定义为默认值,则会生成所有比较运算符

在大多数情况下,您想做什么:

struct example
{
    std::string a;
    int         b;

    auto operator<=>(const example&) const = default;
};
struct示例
{
std::字符串a;
int b;
自动运算符(常量示例&)常量=默认值;
};

<>代码> 您在旧的C++版本中所能做的就是使用CRTP(CurryRead Read模板原理)。 其思想是有一个模板库,模板参数是派生类:

模板
等级可比{
公众:
friend constexpr自动运算符!=(const-Derived&a,const-Derived&b)noexcept{return!(a==b);}
friend constexpr自动运算符(const-Derived&a,const-Derived&b)noexcept{return b=(const-Derived&a,const-Derived&b)noexcept{return!(a
因此,您可以这样使用它:

struct示例:可比较{
friend bool运算符==(常量示例&a、常量示例&b);

friend bool operatorIt’s.参见关系运算符中的最后一点。问这个问题的通常方式是(也在中)“StutytLeunSand and Mulink也许是一个DUPE”也许是我不想在任何一个方向上投票。我认为这6个运算符都叫做关系运算符。@ Cigiin在数学/英语中,是的。C++中,有4个关系和2个相等的操作符。嗯,这有道理。“4个关系运算符…”,它说“当提供三方比较(如std::memcmp或std::string::compare)时,所有六个关系运算符都可以通过以下方式表达:“.其中一种情况下必须是键入错误。@cigien两者在某种程度上都是正确的,但彼此不一致。哈哈,哎哟,这太不幸了。也许我会解决它。”(或者至少有人应该这样做)。