首页 > 后端开发 > C++ > 为什么不能在 C 中重载静态和非静态函数?

为什么不能在 C 中重载静态和非静态函数?

Susan Sarandon
发布: 2024-10-27 14:16:01
原创
439 人浏览过

Why Can't You Overload Static and Non-Static Functions in C  ?

C 中用非静态函数重载静态函数

在 C 中,重载同名的静态和非静态函数不是允许的。 C 标准明确规定了这一点,该标准禁止重载仅返回类型不同或具有相同名称和参数类型的函数(如果其中一个是静态的)。

考虑以下类:

<code class="cpp">class Foo {
    string bla;
    Foo() { bla = "nonstatic"; }

    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>
登录后复制

虽然这个类定义看起来似乎合理,但根据 C 标准,它是无效的。禁止重载静态和非静态函数,因为这会导致歧义,因为静态函数也可以使用对象成员访问 (.) 语法来调用。

例如,在以下代码片段中:

<code class="cpp">Foo f;
f.print();</code>
登录后复制

不清楚应该调用静态打印函数还是非静态打印函数。

此外,C 没有提供判断函数是否被静态调用的方法或者不是,就像在 PHP 中一样。 this 关键字指向调用该函数的对象,它始终为非空。

总结

重载静态和非静态函数C 中不允许有相同的名称。此外,没有机制可以区分函数体内的静态函数调用和非静态函数调用。

以上是为什么不能在 C 中重载静态和非静态函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板