当函数名称不带括号地发送到 cout 时,编译器如何确定在运行时输出什么值?C++ [复制]

How does the compiler determine what value to output during runtime when a function name is sent to cout without parenthesis? C++ [duplicate]

提问人:Euphoria 提问时间:10/15/2020 最后编辑:Euphoria 更新时间:10/15/2020 访问量:64

问:

#include <iostream>

int returnFive()
{
   return 5;
}

int main()
{
   std::cout << returnFive << '\n';
   return 0;
}

由于这编译没有错误,系统如何确定实际发送和打印到控制台的值?

C++ 函数 iostream c++-standard-library

评论

1赞 dxiv 10/15/2020
请参阅如何使用 cout 打印函数指针?。发布的代码中不涉及“函数调用”。
3赞 user4581301 10/15/2020
g++ 产生的错误信息量很大:godbolt.org/z/aePP3c
3赞 Some programmer dude 10/15/2020
若要在 C++ 中调用函数,必须使用括号。否则(不带括号)函数衰减为指向该函数的指针,即 .&returnFive
1赞 Sakib Ahammed 10/15/2020
你可以在这里找到你的答案:stackoverflow.com/questions/17073066/......
1赞 Sakib Ahammed 10/15/2020
这回答了你的问题吗?g++ “调用”一个不带括号的函数(不是 f(),而是 f;为什么它总是返回 1?

答:

1赞 Wander3r 10/15/2020 #1

想象一下,如果编写的代码是这样的

if(returnFive)
  returnFive();

这里的期望是编译器检查函数指针是否是。returnFivenullptr

此处的编译器将函数指针评估为布尔表达式,以显示它是否为 NULL,并打印输出。

https://godbolt.org/z/Psdc69。您可以检查是否正在传递 .cout(bool)