IT Share you

멤버 함수 끝에서 const의 의미는 무엇입니까?

shareyou 2020. 11. 14. 11:21
반응형

멤버 함수 끝에서 const의 의미는 무엇입니까?


이 질문에 이미 답변이 있습니다.

constC ++ 키워드가 멤버 함수의 끝 (인수 목록 뒤)에 쓰여질 때 정확히 무엇을 의미합니까?


그것은 뜻 *this이다 const, 그 멤버 함수 내부가 객체를 변경하지 않습니다 즉.

키워드 this는 값이 함수가 호출되는 객체의 주소 인 prvalue 표현식입니다. this클래스 멤버 함수의 유형은 X입니다 X*. 멤버 함수가 선언 된 const경우 유형은 this입니다 const X*. [섹션 9.3.2 §1]

A의 const멤버 함수는, 함수가 호출되는 객체가 액세스를 통해 const액세스 경로; 따라서 const멤버 함수는 객체와 비 정적 데이터 멤버를 수정해서는 안됩니다. [섹션 9.3.2 §2]

이것은 const멤버 함수가 const클래스 인스턴스에서 호출 될 수 있음을 의미합니다 . const멤버 함수를 호출 할 수 없다 [1]const 잠재적 수정을 시도 할 수 있으므로, 개체.

[1] 참고 : 임시는 유형 이 아닌 한 const객체 가 아닙니다 const.


const함수 시그니처의 끝에는 함수가 자신이 멤버 인 객체가라고 가정해야 함을 의미합니다 const. 실제로는 컴파일러에게 멤버 함수가 어떤 식 으로든 개체 데이터를 변경하지 않는지 확인 하도록 요청하는 것을 의미합니다 . 이는 컴파일러에게 멤버 데이터를 직접 변경하지 않는지 확인하도록 요청하는 것을 의미하며, 객체를 변경하지 않을 것이라고 보장하지 않는 함수를 호출하지 않습니다.

const객체 를 만들 때 컴파일러에게 해당 객체가 초기화 이후 변경되지 않는지 확인하도록 요청합니다. 즉, 컴파일러는 멤버 데이터를 직접 변경하지 않고 객체를 변경하지 않을 것이라고 보장하지 않는 함수를 호출하지 않는지 확인합니다.

이것은 모두 const 정확성 철학의 일부입니다 . 본질적으로 그것은 일이 지금 작동하고 변경되지 않으면 결코 깨지지 않을 것임을 의미합니다. 즉, 지속적인 작업은 안정적으로 작업하기가 더 쉽습니다. const기능 서명의 끝에 것은 당신이 파괴되는 것을 금지하기위한 도구입니다. 이것은 차례로 const가능한 모든 곳에 두어야 함을 의미합니다 .


컴파일러 최적화가 가능하지만 주요 이점은 함수 선언에 표현 된 계약을 시행하는 것입니다. 멤버 함수를로 정의 const하면 컴파일러가 해당 함수 내부의 개체에 대한 수정을 방지합니다.

mutable선언에서 사용하여 클래스의 개별 필드를이 제한에서 제외 할 수 있습니다 . 이것은 예를 들어 자신의 lock_guard를 캡슐화하는 클래스가있을 때 유용합니다.이 클래스는 const멤버 함수 내에서도 스레드 안전성을 강화하기 위해 값을 변경해야합니다 .

참고 URL : https://stackoverflow.com/questions/4059932/what-is-the-meaning-of-a-const-at-end-of-a-member-function

반응형