gpt4 book ai didi

c++ - 函数指针的三向比较失败

转载 作者:行者123 更新时间:2023-12-02 00:24:12 25 4
gpt4 key购买 nike

为什么我无法将函数指针与 GCC trunk 进行比较?

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*并使用std::less<>进行此类比较。

关于c++ - 函数指针的三向比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60620529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com