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

2024-01-08

我正在浏览参考参数 https://en.cppreference.com/w/cpp/container/vector/operator_cmp看到了vector的比较操作已在 C++20 中删除,并且太空船运算符 (<=>)已被引入。对于许多其他标准库容器也可以看到同样的事情,例如set https://en.cppreference.com/w/cpp/container/set/operator_cmp and map https://en.cppreference.com/w/cpp/container/map/operator_cmp.

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


如果您继续浏览参考站点,您可能会看到以下部分默认比较 https://en.cppreference.com/w/cpp/language/default_comparisons,它简单地指出:

简而言之,一个类定义了operator<=>自动获取编译器生成的运算符<, <=, >, and >=.

因此,如果某个类存在“spaceship”运算符,编译器将使用该类的结果自动生成剩余的比较运算符<=>操作员。

请注意,==运算符是not生成(尽管它应该是可能的),但是std::vector保持超载operator==.


As for:

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

不,不会的。

当您使用 C++20 编译器进行构建时,与其一起使用的标准库应该also为 C++20 制作,从而实现<=>运算符,然后将按照上面的说明使用它。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么比较运算符从 C++ 20 的标准库容器中删除? 的相关文章

随机推荐