[英]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.