3

为什么我不能将指向函数的指针与 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)}

4

1 回答 1

4

如果指针不相等,则未指定对函数指针使用普通关系运算符的结果。您可以比较指向对象的指针(但只有当它们是指向同一数组或结构的指针时才有意义),但关联函数指针实际上并不可行。

C++20<=>没有采取有时未指定的路线,而是简单地禁止使用非对象指针

您可以测试此类指针之间的相等性,但不能测试它们的相对顺序。如果您出于某种原因绝对需要这样做,您可以将指针转换为void*s 并std::less<>用于此类比较。

于 2020-03-10T15:18:05.170 回答