#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;
}
};
这是设计好的。
[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参数: