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와 달리 C에서는 이 기능을 제공하지 않습니다. this 키워드는 항상 객체를 가리키며 결코 NULL이 아니므로 정적 호출과 인스턴스 호출을 구별하는 데 사용할 수 없습니다.
위 내용은 C에서 정적 함수가 비정적 함수로 오버로드될 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!