无法用 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中文网其他相关文章!