鉴于cppreference on<=>
中的示例,我们可以将示例代码简化为:
struct person {
std::string name;
std::string surname;
auto operator <=> (const person& p) const {
if (const auto result = name <=> p.name; result != 0) {
return result;
} else {
return surname <=> p.surname;
}
}
};
但是我的 IDE(CLion 2020.2)通过 clang-tidy 警告说result != 0
实际上应该是result != nullptr
. 我不知道我们可以std::###_ordering
与nullptr
. Cpprefence 还声称我们应该将它与 literal 进行比较0
。那里什么都nullptr
没有。
这段代码:
int main() {
person p1{"ccc", "vvv"};
person p2{"aaa", "zzz"};
std::cout << (p1 < p2);
}
编译(GCC 10.1.0,Rev3,由 MSYS2 项目构建)并产生与版本相同的0
结果nullptr
。
但是,我的 IDE 也警告我应该“ Clang-Tidy: Use nullptr ” with p1 < p2
. 通过应用“修复”,代码会更改为std::cout << (p1 nullptr p2);
无法编译的代码。它暗示它可能是 clang-tidy 中的一个错误,但它没有解释为什么我们可以将排序与nullptr
. 为什么我们可以,为什么它有效,为什么我们想要它?