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