>  기사  >  백엔드 개발  >  C에서 정적 함수가 비정적 함수로 오버로드될 수 있습니까?

C에서 정적 함수가 비정적 함수로 오버로드될 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 03:39:02174검색

Can Static Functions Be Overloaded with Non-Static Functions in C  ?

C에서 정적 함수를 비정적 함수로 오버로드

컨텍스트:

함수 오버로드 다른 반환 유형을 사용하는 것은 C에서 지원되지 않으며, 비정적 함수로 정적 함수를 오버로드하려고 시도할 때도 마찬가지입니다. 이 시나리오는 제공된 클래스 정의에 설명되어 있지만 오류가 발생했습니다.

표준 금지:

이 동작은 C 표준(ISO 14882: 2003, 섹션 13.1/2):

  • 반환 유형만 다른 ​​함수에는 오버로딩이 허용되지 않습니다.
  • 동일한 이름과 매개변수 유형을 가진 멤버 함수 선언은 다음과 같은 경우에 오버로드될 수 없습니다. any는 정적 멤버 함수 선언입니다.

모호성 고려 사항:

오버로드가 허용되더라도 다음과 같은 이유로 모호성이 발생합니다.

  • C 표준(ISO 14882:2003, 섹션 9.4/2)에 따라 인스턴스에서 정적 함수를 호출할 수 있습니다.

예:

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

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

대체 접근 방식:

C에서는 함수가 정적으로 호출되는지 여부를 결정하는 것이 불가능하므로 원하는 기능을 달성하기 위해 대체 방법을 사용할 수 있습니다.

  • 사용 정적 호출과 비정적 호출을 구별할 수 있는 매크로를 정의하는 전처리기.
  • 정적 및 비정적 동작에 대해 다른 이름을 사용하여 별도의 함수를 만듭니다.
  • 객체의 유무에 따라 조건문을 사용하세요(예: this의 값 확인). 하지만 이 방법은 정적 호출과 인스턴스 호출을 구분할 수 없습니다.

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

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