Voi*_*tar 7 c++ operator-overloading compiler-generated
假设我正在编写一个int包装器并且需要提供每个运算符重载。作者必须列出每一个,还是可以根据作者提供的内容自动生成任何一个?编译器是否可以/是否从现有运算符中推断出任何新的自动定义运算符?
如果我定义operator==,它会operator!=自动给我一个吗?或相反亦然?
如果我定义operator++(),我可以operator++(int)免费获得吗?或相反亦然?
怎么样+=类型的企业?它可以结合operator+with 的现有定义operator=来生成operator+=吗?理论上应该是可能的,但有吗?
同样的问题>=to<等,还是我必须完整列出>, >, >=, 的定义<=?
在核心语言中,各个运算符是独立的。有些是根据其他运算符定义的,但如果运算符调用的重载解析失败,则不会尝试根据其他运算符来表达该调用。当需要时,程序员可以轻松地表达它(相反,关闭此类机器可能会更困难)。
客户端代码可以使用一组关系运算符重载std::rel_ops,它们是根据<和定义的==。
您可以轻松编写一个 mixin 类,该类提供以<and==或三值compare函数形式表示的关系运算符。这就是奇怪重复模板模式(称为Barton-Nackman 技巧)的最初动机。