簡體   English   中英

函數指針的三路比較失敗

[英]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)}

如果指針不相等,則在函數指針上使用普通關系運算符的結果是不確定的 您可以比較指向對象的指針(但只有當它們是指向同一數組或結構的指針時才有意義),但關聯函數指針並不是真正可行的。

C++20沒有采取有時未指定的路線,而是簡單地禁止將<=>用於非對象指針

您可以測試這些指針之間的相等性,但不能測試它們的相對順序。 如果您出於某種原因絕對需要這樣做,您可以將指針轉換為void* s 並使用std::less<>進行此類比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM