const 인수를 사용하는 함수 이해 및 오버로딩
프로그래밍에서 오버로딩을 사용하면 이름은 같지만 매개변수가 다른 여러 함수가 동일한 환경에서 공존할 수 있습니다. 수업. 그러나 포인터가 아닌, 참조가 아닌 유형의 불변성을 기반으로 오버로드를 시도하면 컴파일러 오류가 발생합니다. 이 문서에서는 이러한 제한 사항과 대체 접근 방식의 이유를 살펴봅니다.
다음 코드 조각을 고려하세요.
class Test { public: Test() {} int foo(const int) const; int foo(int); };
이 코드를 컴파일할 때 컴파일러는 foo 함수를 사용할 수 없다는 오류를 표시합니다. 과부하가 걸리다. 이는 비포인터, 비참조 유형의 불변성이 함수 시그니처에 영향을 주지 않기 때문입니다. 위의 예에서 두 함수 모두 int foo(int)라는 동일한 서명을 갖습니다.
이 제한이 존재하는 이유를 이해하려면 다음 상황을 고려하십시오.
Test obj; int variable = 0; obj.foo(3); // Calls the const function obj.foo(variable); // Intends to call the non-const function
오버로드가 허용된 경우 constness에서 컴파일러는 obj.foo(variable)가 호출될 때 어떤 함수를 호출할지 결정할 수 없습니다. 값으로 전달하면 값이 복사되고 const 지정은 함수 호출과 무관하기 때문이다.
따라서 비포인터, 비참조형의 상수성을 기반으로 한 오버로드는 허용되지 않는다. C에서. 대안으로, 서로 다른 이름을 가진 두 개의 별도 함수를 생성할 수 있습니다. 예:
class Test { public: Test() {} int fooConst(const int); int fooNonConst(int); };
위 내용은 비포인터, 비참조 유형에 대한 `const` 한정자를 기반으로 함수를 오버로드할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!