为什么在C++20中从标准库容器中删除了比较运算符



我正在浏览cpprreference,看到vector的比较操作在C++20中被删除,并且引入了宇宙飞船操作员(<=>(。对于许多其他标准库容器,如setmap,也可以看到同样的情况。

如何在新标准中进行比较?另外,C++20会在旧代码上出现错误吗?

如果你继续在参考网站上浏览一点,你可能会看到默认比较的部分,它只是简单地说明:

简而言之,定义operator<=>的类会自动获得编译器生成的运算符<<=>>=

因此,如果类存在"太空船"运算符,编译器将使用<=>运算符的结果自动生成剩余的比较运算符。

请注意,==运算符是而不是生成的(尽管这应该是可能的(,但std::vector保持operator==的过载。


关于:

C++20会开始在旧代码上出错吗?

不,不会。

当您使用C++20编译器构建时,与它一起使用的标准库也应该为C++20制作,从而实现<=>运算符,然后将如上所述使用该运算符。

但是,如果您使用C++20编译器使用较旧的标准库进行构建,则该较旧标准库仍将实现较旧的比较运算符。

最新更新