>  기사  >  백엔드 개발  >  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와 달리 C에서는 이 기능을 제공하지 않습니다. this 키워드는 항상 객체를 가리키며 결코 NULL이 아니므로 정적 호출과 인스턴스 호출을 구별하는 데 사용할 수 없습니다.

위 내용은 C에서 정적 함수가 비정적 함수로 오버로드될 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.