멤버 함수 끝에서 const의 의미는 무엇입니까?
이 질문에 이미 답변이 있습니다.
const
C ++ 의 키워드가 멤버 함수의 끝 (인수 목록 뒤)에 쓰여질 때 정확히 무엇을 의미합니까?
그것은 뜻 *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
멤버 함수 내에서도 스레드 안전성을 강화하기 위해 값을 변경해야합니다 .
'IT Share you' 카테고리의 다른 글
POJO를 만드는 방법은 무엇입니까? (0) | 2020.11.14 |
---|---|
누가 "_"단일 밑줄 쿼리 매개 변수를 추가합니까? (0) | 2020.11.14 |
Rails 3 양식 제출에서 "utf8 = ✓"제거 (0) | 2020.11.14 |
파이썬 3 string.join () 동등합니까? (0) | 2020.11.14 |
링커에서 "재배치에 기호 인덱스에 잘못된 기호가 있습니다."를 반환합니다. (0) | 2020.11.14 |