C ++에서 const 오버로딩을 사용하는 것은 무엇입니까?
C ++에서 함수의 서명은 부분적으로 그것이 const인지 아닌지에 달려 있습니다. 이것은 하나의 클래스가 하나는 const이고 다른 하나는 그렇지 않다는 점을 제외하고는 동일한 서명을 가진 두 개의 멤버 함수를 가질 수 있음을 의미합니다. 이와 같은 클래스가있는 경우 컴파일러는 호출하는 객체에 따라 호출 할 함수를 결정합니다. 클래스의 const 인스턴스 인 경우 함수의 const 버전이 호출됩니다. 객체가 const가 아니면 다른 버전이 호출됩니다.
어떤 상황에서이 기능을 활용하고 싶습니까?
이것은 멤버 함수가 클래스의 데이터 멤버 (또는 멤버의 멤버 또는 멤버 멤버의 멤버 등)에 대한 포인터 또는 참조를 반환 할 때만 의미가 있습니다. 일반적으로 상수가 아닌 포인터 또는 데이터 멤버에 대한 참조를 반환하는 것은 눈살을 찌푸 리지만 때로는 합리적이거나 단순히 매우 편리합니다 (예 : [] 연산자). 이러한 경우 getter의 const 및 non-const 버전을 제공합니다. 이런 식으로 객체를 수정할 수 있는지 여부에 대한 결정은 객체를 사용하는 함수에 따라 달라지며,이를 const 또는 non-const로 선언 할 수 있습니다.
컴파일러가 const 객체 또는 일반 객체를 반환하는지 여부를 적용하고 동일한 메서드 서명을 유지하도록 만들 수 있습니다. Const Correctness에 대한 자세한 설명이 있습니다.
객체에 대한 const 참조를 반환할지 여부를 결정하는 데 사용할 수 있습니다. STL의 컨테이너는 const 오버로드 된 begin () 및 end () 함수를 사용하여 const_iterator 또는 일반 반복자를 반환할지 여부를 결정합니다.
std :: map :: operator []의 동작을 살펴보십시오. 잘못된 키를 참조하려고하면 const 버전에서 오류가 발생하지만 const가 아닌 버전은 삽입을 수행합니다. 삽입 동작은 std :: map :: insert를 사용하는 것보다 훨씬 간편하지만 (덮어 쓰기도 수행합니다) const 맵에서는 작동하지 않습니다.
참조 URL : https://stackoverflow.com/questions/251159/what-is-the-use-of-const-overloading-in-c
'Programing' 카테고리의 다른 글
전역 npm 패키지는 Ubuntu에서 어디에 설치됩니까? (0) | 2020.12.25 |
---|---|
파일 기반 H2 데이터베이스를 사용하도록 spring-boot를 구성하는 방법 (0) | 2020.12.25 |
Eclipse에서 줄 높이 / 줄 간격을 어떻게 변경할 수 있습니까? (0) | 2020.12.25 |
ruby-prof 출력 이해 (0) | 2020.12.25 |
TFS : 소스 제어에서 이름으로 파일 검색 (0) | 2020.12.25 |