gpt4 book ai didi

c++ - 为什么这里会出现 "the adress of bool will always evaluate as true"?

转载 作者:行者123 更新时间:2023-11-30 03:58:04 27 4
gpt4 key购买 nike

我正在尝试了解函数指针的工作原理。这是代表设置:

bool f1(int x){
if(condition){return true;}
else return false;
}

bool f2(int x, bool (*func)(int)){
if (func(x)){return true;}
else return false;
}

void f3(int x, bool (*func)(int, bool)){
if (func(x, f1)) {return "Whatever";}
else return "Nevermind";

int main(){
f3(x, f2);
}

这给了我:
在函数“void f3()”中:
“警告:bool 'f1(int)' 的地址将始终评估为 'true' [-Waddress]
在函数“int main()”中:
错误:从“bool ()(int,bool ()(int))”到“bool (*)(int, bool)”的无效转换

我搞砸了多少?

最佳答案

void f3(int x, bool (*func)(int, bool)){
^^^^

f3 的第二个参数是指向第二个参数为 bool 的函数的指针。

f2 是您要传递给 f3 并从 f3 调用的函数类型,但是 f2 的第二个参数的类型为 bool (*)(int)

所以 f3 应该相应地声明:

void f3(int x, bool (*func)(int, bool (*)(int)))

注意:通过适本地使用 typedef 可以使其更具可读性:

typedef bool f1_t(int);
typedef bool f2_t(int, f1_t*);

bool f1(int x) { ... }
bool f2(int x, f1_t* func) { ... }
void f3(int x, f2_t* func) { ... }

关于c++ - 为什么这里会出现 "the adress of bool will always evaluate as true"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27612160/

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