MyTinySTL
MyTinySTL copied to clipboard
关于set 和map的比较操作符重载问题
friend bool operator==(const set& lhs, const set& rhs) { return lhs.tree_ == rhs.tree_; } friend bool operator< (const set& lhs, const set& rhs) { return lhs.tree_ < rhs.tree_; }
set.h第199行和200行
已经在类内定义了比较操作符,在类外又定义了一次,这样不会出现重定义的问题吗
friend 的原型在类中出现,但是貌似友元函数不是成员函数吧,应该不会出现重定义的问题。
不会重定义。类内的是非模板函数,它与函数模板不对应。
但这个设计会导致类外的 operator==
和 operator<
函数模板不被选择,使用 ==
或 <
时选择的是非模板函数。
我想我们可以把 MyTinySTL 的所有比较运算符改成友元。虽然这和标准库不一致,但可能更好。
另外在 C++20 模式下不再需要单独的关系运算符或 operator!=
,仅提供 operator==
和 operator<=>
即可。
我想我们可以把 MyTinySTL 的所有比较运算符改成友元。虽然这和标准库不一致,但可能更好。 另外在 C++20 模式下不再需要单独的关系运算符或 ,仅提供 和 即可。
operator!=``operator==``operator<=>
谢谢解答!对类模板的友元了解的不是很透彻,请教一下大佬这里的friend bool operator==(const set& lhs, const set& rhs)
set不加模板参数是因为是在类模板内声明并定义的吗。
我想我们可以把 MyTinySTL 的所有比较运算符改成友元。虽然这和标准库不一致,但可能更好。 另外在 C++20 模式下不再需要单独的关系运算符或 ,仅提供 和 即可。
operator!=
operator==operator<=>
谢谢解答!对类模板的友元了解的不是很透彻,请教一下大佬这里的
friend bool operator==(const set& lhs, const set& rhs)
set不加模板参数是因为是在类模板内声明并定义的吗。
是的,此处的 set
是注入类名(injected-class-name),可以自动指代类模板的当前特化。