【发布时间】:2023-03-09 01:56:01
【问题描述】:
我不小心打印了一个没有括号的函数名,它打印了一个值。我只是好奇这是怎么发生的? 无论函数名称或定义如何,输出都是相同的,并且每次我运行它。
编辑:对于正在阅读本文的其他人,答案消除了我的疑问- 将函数名称显式转换为 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;
}
【问题讨论】:
-
你为什么混合
cout和printf -
printf不是类型安全的。仅仅因为printf可以做某事,并不意味着它应该。
标签: c++