首页  >  文章  >  后端开发  >  为什么在 C 中打印函数名称会导致“1”?

为什么在 C 中打印函数名称会导致“1”?

Patricia Arquette
Patricia Arquette原创
2024-10-26 03:40:03726浏览

Why Does Printing a Function Name in C   Result in

计算一个不调用的函数:解开谜团

想象一下:你正在编码,而不是调用带括号的函数,您只需打印它的名称即可。令人惊讶的是,结果总是 1。这种非常规的方法让您感到困惑,无论是关于 1 还是缺少预期的函数指针。

让我们深入研究代码的复杂性:

<code class="c++">#include <iostream>
using namespace std;

void pr()
{
    cout << "sth";
}

int main()
{
    pr;
    cout << pr; // output: 1
    cout << *pr; // output: 1
    cout << &pr; // output: 1
}

与您的意图相反,您实际上并没有在 cout<< 中调用函数 pr声明。相反,您将其函数指针传递给 cout。这会导致 pr 隐式转换为布尔值,从而导致输出中普遍存在 1。

为了增强您的理解,请考虑使用 cout <<打印前的布尔阿尔法。这将显示 true 而不是 1,从而增强了输出的布尔性质。

虽然 C 11 提供了一个优雅的解决方案:

<code class="c++">template <class RType, class ... ArgTypes>
std::ostream & operator<<(std::ostream & s, RType(*func)(ArgTypes...))
{
    return s << "(func_ptr=" << (void*)func << ")(num_args="
             << sizeof...(ArgTypes) << ")";
}</code>

此重载允许您打印任意数量的函数指针,显示函数指针的地址及其参数数量等信息。

所以,你已经知道了:神秘的 1 不仅仅是巧合,而是隐式类型转换的结果。理解这种行为对于避免意外结果和编写更健壮的代码至关重要。

以上是为什么在 C 中打印函数名称会导致“1”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn