gpt4 book ai didi

c++ - 为什么打印一个函数名会返回一个值?

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

我不小心打印了一个没有括号的函数名,它打印了一个值。我只是好奇这是怎么发生的?无论函数名称或定义如何,每次运行时输出都是相同的。

编辑:对于正在阅读本文的任何其他人,答案消除了我的疑问 - 将函数名显式转换为 int 是可行的, 即 int k=(int)foo;

这段测试代码会让事情变得更清楚:

#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;

void foo(){cout<<'Á';} //FUNCTION IS NEVER CALLED

int main()
{
while(_kbhit()) //JUST TO MAKE SURE BUFFER IS CLEARED
{ getch();} //SAME RESULT WITHOUT THESE TWO STATEMENTS

cout<<foo; //OUTPUT 1
printf("\n%u", foo); //OUTPUT 4199232
/*int k=foo; //CANNOT CONVERT VOID(*)() TO 'INT'*/
return 0;
}

最佳答案

不带括号的函数名被解释为函数指针。该指针被 %u 格式说明符解释为 unsigned int,这是未定义的行为,但恰好适用于大多数系统。

int k = foo 不起作用的原因是函数指针通常需要转换为 int。但是,printf 更为宽松,因为它使用 varargs 来解析其参数字符串;假定参数的类型与格式字符串中请求的类型相匹配。

关于c++ - 为什么打印一个函数名会返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771284/

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