假设我正在写一个 int
包装器并需要提供每个单独的运算符重载。作者必须列出每一个,还是可以根据作者提供的内容自动生成任何一个?编译器能否/是否从现有运算符中推断出任何新的自动定义运算符?
如果我定义 operator==
,它会给我一个 operator!=
吗?自动地?还是相反?
如果我定义 operator++()
, 我得到 operator++(int)
免费?还是相反?
+=
怎么样?类型业务?它可以结合 operator+
的现有定义吗?与 operator=
生成 operator+=
?理论上应该可行,但真的可行吗?
>=
的相同问题至 <
等,还是我必须完整列出 >
的定义? , >
, >=
, <=
?
最佳答案
在核心语言中,各种运算符是独立的。有些是根据其他运算符定义的,但是如果运算符调用的重载解析失败,则不会尝试根据其他运算符来表达该调用。当需要时,程序员可以很容易地表达出来(相反,关闭这种机器可能会更困难)。
std::rel_ops
中有一组关系运算符重载客户端代码可以使用,根据 <
定义和 ==
.
您可以轻松编写一个混合类,它根据 <
提供关系运算符和 ==
,或者就三值而言 compare
功能。这是 Curiously Recurring Template Pattern 的最初动机,称为 Barton-Nackman trick .
关于c++ - 是否有任何 C++ 运算符重载是基于其他运算符自动提供的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816843/