函数指针的三向比较失败
Three-way comparison of pointer to functions fails
为什么我不能将指向函数的指针与 GCC 主干进行比较?
using f_t = int(*)(int);
f_t a { nullptr }, b { nullptr };
auto c = a <=> b;
int main (){}
给予
a.cpp:4:13: error: invalid operands of types ‘f_t’ {aka ‘int (*)(int)’} and ‘f_t’ {aka ‘int (*)(int)’} to binary ‘operator<=>’
4 | auto c = (a <=> b) == 0;
| ~ ^~~ ~
| | |
| | f_t {aka int (*)(int)}
| f_t {aka int (*)(int)}
在函数指针上使用普通关系运算符的结果是 unspecified if the pointers are unequal。您可以比较指向对象的指针(但只有当它们是指向同一数组或结构的指针时才有意义),但是关联函数指针并不真正可行。
而不是采取有时未指定的路线,C++20 simply forbids using <=>
for non-object pointers。
您可以测试这些指针之间的相等性,但不能测试它们的相对顺序。如果您出于某种原因绝对需要这样做,您可以将指针转换为 void*
s 并使用 std::less<>
进行此类比较。
为什么我不能将指向函数的指针与 GCC 主干进行比较?
using f_t = int(*)(int);
f_t a { nullptr }, b { nullptr };
auto c = a <=> b;
int main (){}
给予
a.cpp:4:13: error: invalid operands of types ‘f_t’ {aka ‘int (*)(int)’} and ‘f_t’ {aka ‘int (*)(int)’} to binary ‘operator<=>’
4 | auto c = (a <=> b) == 0;
| ~ ^~~ ~
| | |
| | f_t {aka int (*)(int)}
| f_t {aka int (*)(int)}
在函数指针上使用普通关系运算符的结果是 unspecified if the pointers are unequal。您可以比较指向对象的指针(但只有当它们是指向同一数组或结构的指针时才有意义),但是关联函数指针并不真正可行。
而不是采取有时未指定的路线,C++20 simply forbids using <=>
for non-object pointers。
您可以测试这些指针之间的相等性,但不能测试它们的相对顺序。如果您出于某种原因绝对需要这样做,您可以将指针转换为 void*
s 并使用 std::less<>
进行此类比较。