我正在浏览cpprreference,看到vector
的比较操作在C++20中被删除,并且引入了宇宙飞船操作员(<=>
(。对于许多其他标准库容器,如set
和map
,也可以看到同样的情况。
如何在新标准中进行比较?另外,C++20会在旧代码上出现错误吗?
如果你继续在参考网站上浏览一点,你可能会看到默认比较的部分,它只是简单地说明:
简而言之,定义
operator<=>
的类会自动获得编译器生成的运算符<
、<=
、>
和>=
。
因此,如果类存在"太空船"运算符,编译器将使用<=>
运算符的结果自动生成剩余的比较运算符。
请注意,==
运算符是而不是生成的(尽管这应该是可能的(,但std::vector
保持operator==
的过载。
关于:
C++20会开始在旧代码上出错吗?
不,不会。
当您使用C++20编译器构建时,与它一起使用的标准库也应该为C++20制作,从而实现<=>
运算符,然后将如上所述使用该运算符。
但是,如果您使用C++20编译器使用较旧的标准库进行构建,则该较旧标准库仍将实现较旧的比较运算符。