gpt4 book ai didi

c++ - if 语句中的函数名以一种奇怪的方式转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:59 25 4
gpt4 key购买 nike

使用此代码(有效的 C++11):

#include <stdio.h>
#include <typeinfo>

bool my_awesome_func(int param) {
return (param > 1);
}

int main(int argc, char const *argv[]) {
fprintf(stderr, "type of my_awesome_func: %s\n",
typeid(my_awesome_func).name());
if (my_awesome_func) {
fprintf(stderr, "WHAT???\n");
}
return 0;
}

问题在 if 语句中。虽然 typeid 返回一些看起来像 FbiE 的东西(我认为这是函数类型的 gcc 语言)我不明白为什么这种类型被隐式转换为 bool (只是一个例子,也适用于 int)。

为什么 if 语句编译并计算为真?

最佳答案

您的代码中没有转换。强制转换是一种显式转换。我假设您在问:将函数隐式转换为 bool 有什么作用?

答案是:函数被转换为函数指针。然后通过隐式转换将函数指针转换为bool。该转换定义为产生:

  • false 为空函数指针
  • true 对于任何其他函数指针

因此在您的代码中,始终输入 if (my_awesome_func) 的主体。 (将实际函数转换为函数指针永远不会产生空指针)。

关于c++ - if 语句中的函数名以一种奇怪的方式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003680/

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