C++ != 在C++;20?
这是C++20中的标准行为吗?我在参考资料中找不到关于它的任何东西 我刚刚在Clang和VisualStudio上都试过了,它工作正常,没有给我任何错误或警告。我还检查了调试器,查看是否调用了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现在是否允许自动生成运算符=代码>当操作员==
存在时?它是否默认为正常的!(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两者在某种程度上都是正确的,但彼此不一致。哈哈,哎哟,这太不幸了。也许我会解决它。”(或者至少有人应该这样做)。