首页  >  文章  >  后端开发  >  为什么 C 中静态函数不能用非静态函数重载?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 11:12:30740浏览

Why Can't Static Functions Be Overloaded with Non-Static Functions in C  ?

无法用 C 中的非静态函数重载静态函数

虽然许多编程语言允许基于静态或实例方法重载函数,C明确禁止这种行为。 C 标准 13.1/2 规定,具有相同名称和参数类型的成员函数如果其中任何一个是静态的,则不能重载。

<code class="cpp">class X {
    static void f();
    void f();
};</code>

在上面的示例中,考虑了 f() 的两个声明标准格式不正确。

在实例上调用静态函数时存在歧义

即使在这种情况下允许函数重载,在调用实例上的静态函数。 C 标准 9.4/2 允许使用限定 ID(例如 X::f())和类成员访问语法(例如 g().reschedule())来调用静态成员。因此,在下面的代码中,不清楚应该调用静态还是非静态 print() 函数:

<code class="cpp">class Foo {
    void print() { cout << "nonstatic" << endl; }
    static void print() { cout << "static" << endl; }
};

Foo f;
f.print(); // Ambiguous: static or non-static?</code>

检查函数是否被静态调用

与 PHP 不同,在 PHP 中你可以检查是否定义了 this 变量来确定函数是否被静态调用,而 C 不提供此功能。 this 关键字始终指向一个对象,并且永远不会为 NULL,因此您不能使用它来区分静态调用和实例调用。

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

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