我在浏览cppreference,看到vector
C++20中去掉了比较操作,<=>
引入了宇宙飞船操作符()。对于许多其他标准库容器(例如set
和map
.
如何在新标准中进行比较?另外,C++20 会开始在旧代码上报错吗?
我在浏览cppreference,看到vector
C++20中去掉了比较操作,<=>
引入了宇宙飞船操作符()。对于许多其他标准库容器(例如set
和map
.
如何在新标准中进行比较?另外,C++20 会开始在旧代码上报错吗?
如果您继续浏览参考网站一点,您可能会来到默认比较部分,该部分仅说明:
简而言之,定义
operator<=>
自动获取编译器生成的运算符<
、<=
、>
和的类>=
。
因此,如果某个类存在“spaceship”运算符,编译器将使用运算符的结果自动生成剩余的比较运算符<=>
。
请注意,不会==
生成运算符(即使它应该是可能的),但会保持.std::vector
operator==
至于:
C++ 20 会开始在旧代码上报错吗?
不,它不会。
当您使用 C++20 编译器构建时,与它一起使用的标准库也应该为 C++20 制作,从而实现<=>
运算符,然后将按上述说明使用该运算符。
但是,如果您使用 C++20 编译器与较旧的标准库一起构建,则较旧的标准库仍将实现较旧的比较运算符。