我知道技术上的答案是:因为标准规定如此。但我对其动机感到困惑: 我认为在默认<=>时没有任何"库"的东西:它可能会返回一些在std中技术上定义的类型,但从某种意义上说,它是一个"虚假的库"类型,因为编译器必须知道它,因为它必须能够使用auto返回类型来默认operator <...
在我试图了解C++运算符的过程中,我偶然发现了一个列出了一个奇怪比较运算符的表格。这个<=>运算符是做什么用的? 自2017年以来,cppreference.com更新了该页面,现在包含了关于<=>运算符的详细信息。
考虑以下代码: #include <iostream> #include <compare> class A { public: int i = {}; std::strong_ordering operator<=> (A const&...
使用clang10和-std=c++20编译时,以下程序无法编译通过#include "clang/AST/ASTContext.h" int main(){} 使用 -std=c++17 可以使其正常工作。 这是编译尝试输出(请注意,由于我没有在命令行中提供必需的 -l,因此在 C++17...
C++20 允许用户在定义 operator <=> 时指定不同的返回类型:std::partial_ordering、std::weak_ordering 和 std::strong_ordering。指定它们是否意味着相应的类承诺遵守某些排序公理?例如,对于部分排序,这些公理将...
为什么太空船操作符<=>选择一个等号而不是两个?这是否被认为与通常意味着赋值的一个等号和比较的两个等号不一致?
让我感到惊讶的是,我遇到了另一个问题,类似于 C++20行为破坏现有代码等于运算符?。 考虑一个简单的不区分大小写的键类型,可用于例如std::set或std::map:// Represents case insensitive keys struct CiKey : std::string...
注意:我认为这可能是问题的技术重复,但: C++20中对==的更改相当激进,我不确定重新唤起9年前的问题是否合适。 我特别询问编译器正在重写的运算符==和<=>,而不是例如运算符<。 p.s.目前我有自己的观点(基于foonathan的一些讨论),但这只是当前的偏好,...
C++20中引入了新的比较运算符<=>,但我认为在大多数情况下,简单的减法运算就可以胜任: 有一个新的比较运算符<=>,但是我认为在大多数情况下使用简单的减法即可。int my_strcmp(const char *a, const char *b) { wh...
在"Is it possible to sort a list of objects depending on if the individual object's response to a method?"这篇文章中,我发现飞碟在布尔值上无法正常工作。 考虑以下内容: Ruby 1.8...