以下代码:
#include <iostream>
using namespace std;
int test()
{
cout<<"question \n";
return 0;
}
int main(){
cout<<test;
}
输出: 题 1
以下代码每次运行时都会给出1,但我希望输出为0。
然而,当我用test()替换测试时,我得到了预期的输出。不知道为什么会这样。如果背后有任何规则,请建议并发表评论。
答案 0 :(得分:2)
C ++总是要求您使用括号来调用函数。如果省略它们,它会认为您想知道函数的地址而不是调用它。然后将该地址视为(truthy)布尔值并输出为1.此警告(来自gcc -Wall
)解释得很好:
x.cpp: In function ‘int main()’:
x.cpp:9:11: warning: the address of ‘int test()’ will always evaluate as ‘true’ [-Waddress]
cout<<test;
^
答案 1 :(得分:0)
std::cout << test;
输出1因为test是一个函数指针,它将被std::cout
转换为bool。