#include <compare>
struct A
{
int n;
auto operator <=>(const A&) const noexcept = default;
};
struct B
{
int n;
auto operator <=>(const B& rhs) const noexcept
{
return n <=> rhs.n;
}
};
int main()
{
A{} == A{}; // ok
B{} == B{}; // error: invalid operands to binary expression
}
用clang-10编译为clang-std=c++20-stdlib=libc++++main.cpp
在宇宙飞船操作员的最初设计中,允许==
调用<=>
,但后来出于效率考虑不允许调用(<=>
通常是实现==
)的低效方法。操作符<=>()=default
仍然被定义为隐式定义操作符==
,为了方便起见,它正确地调用成员的==
而不是<=>
。所以你想要的是:
struct A {
int n;
auto operator<=>(const A& rhs) const noexcept = default;
};
// ^^^ basically expands to vvv
struct B {
int n;
bool operator==(const B& rhs) const noexcept
{
return n == rhs.n;
}
auto operator<=>(const B& rhs) const noexcept
{
return n <=> rhs.n;
}
};
请注意,您可以独立地默认operator==
,同时仍然提供用户定义的操作符<=>
:
struct B {
int n;
// note: return type for defaulted equality comparison operator
// must be 'bool', not 'auto'
bool operator==(const B& rhs) const noexcept = default;
auto operator<=>(const B& rhs) const noexcept
{
return n <=> rhs.n;
}
};
问题内容: 我不是从情节提要中使用a ,而是要有一个自定义函数,可以在其中传递某些对象的。我只想像在Objective- C中一样打电话。像这样: 但是我收到以下编译器错误: 必须调用超类UIViewController的指定初始化程序 我可以不再这样做吗? 问题答案: 对于指定的初始化器是。您应该打电话给它。 参见http://www.bignerdranch.com/blog/real-iph
就这么简单。谢谢你
问题内容: 我有一个expressjs应用程序,在特定的路由上,我调用了一个函数,该函数通过使用数据库文档作为参数来响应数据库中的用户。我使用基于promise的库,并且想在将数据库文档放入响应中的回调内联。但是当我这样做时程序会失败。有人可以解释为什么吗?我还想知道为什么内联调用才能真正起作用。两种方法和之间有一些根本区别吗? 这是一个有效和无效的示例。假定返回用户文档的承诺。 问题答案: 像这
问题内容: 我不应该能够调用实例化对象的私有方法。我想知道为什么下面的代码有效。 我知道可以从类中访问私有方法。但是,如果类中的方法实例化了同一类的对象,则作用域规则是否不适用于该实例化的对象? 如本例所示,像main这样的静态方法可以访问类的非静态成员吗? 问题答案: 您的方法是的方法,因此可以调用的私有方法。 只是因为它是一个方法并不妨碍它表现得像为目的的方法,等等。 只是阻止的方法 等
我为我的Gridview调用了一个javascript,但它看起来像文档。所有这些在Chrome/Firefox中都不起作用。 我可以用什么来代替它?非常感谢。
问题内容: 最近,我发现SQLAlchemy的Column默认值不起作用,因为我希望它能: 我想在对象实例化之后立即相等,但是似乎默认值仅在执行命令时使用,这确实使我感到困惑。为什么一个宁愿 过?以及如何实现我想要的?我应该在中指定所有默认参数吗?这似乎是代码重复:要更改默认值,我必须将其更改两次并保持这些值相等- 有什么办法可以避免这种情况? 问题答案: 您可以使用from的监听器来更改此行为: