c++에서 explicit 와 mutable 키워드 에 대한 심도 있 는 탐구
1.explicit 키워드
c++표준 입 출력 에 관 한 글 을 쓰 고 iostream 구현 코드 를 볼 때 구조 함수 앞 에 explicit 키워드 가 있 는 것 을 자주 볼 수 있 습 니 다.그렇다면 어떤 역할 을 하 는 것 일 까요?
explicit 는 구조 함수 에 의 해 정 의 된 암시 적 변환 을 방지 하기 위해 다음 코드 를 먼저 봅 니 다.
#include <iostream>
class Base
{
private:
int a;
public:
Base(int p_a){
a = p_a;}
~Base(){}
void print()
{
std::cout << "a=" << a << std::endl;
}
};
int main()
{
Base base = 5;
base.print();
base = 6;
base.print();
return 0;
}
int 형식의 개인 구성원 변수 만 있 는 클래스 를 설명 합 니 다.이 때 explicit 키 워드 를 사용 하지 않 으 면 class Base base=5 를 직접 사용 할 수 있 습 니 다.멤버 변수 에 값 을 부여 하 는 것 은 그만 두 겠 습 니 다.그 가 구 조 를 하고 있다 고 생각 하 세 요.하지만 base=6 이라는 줄 의 코드 는 말 도 안 됩 니 다.set 함 수 를 호출 하지 않 고 개인 구성원 의 값 을 바 꾸 었 습 니 다.이것 은 바로 자신의 집에 놓 인 돈 입 니 다.다른 사람 이 벽 을 사이 에 두 고 당신 의 돈의 수량 을 수정 할 수 있 습 니 다.생각해 보 세 요.당신 은 10000 원 을 집에 두 었 습 니 다.어떤 사람 이 손가락 으로 가리 키 면 돈 이 100 이 되 는 게 무 섭 지 않 아 요?그러나 구조 함수 앞 에 explicit 키 워드 를 추가 하면 코드 를 더 이상 이렇게 쓰 면 안 됩 니 다.컴 파일 이 잘못 되 었 습 니 다.다음 과 같 습 니 다.
// explicit
explicit Base(int p_a){
a = p_a;}
오류 신고 내용 은 다음 과 같 습 니 다.test.cpp:19:14:error:conversion from'int'to non-scalar type'Base'required.이렇게 하면 다른 사람 이 벽 을 사이 에 두 고 집 돈의 수량 을 수정 하 는 것 을 피 할 수 있 습 니 다.그렇다면 왜 explicit 가 이 역할 을 할 수 있 습 니까?이 키 워드 를 설명 하지 않 기 전에 컴 파일 러 는 현재 의 정의 와 구조 함수 에 따라 컴 파일 할 때 암시 적 인 유형 전환 을 했 습 니 다.그러나 컴 파일 러 가 explicit 라 는 키 워드 를 발견 한 후에 이 암시 적 전환 을 하지 않 습 니 다.이때 등호 양쪽 의 값 유형 이 현저히 다 릅 니 다.당연히 컴 파일 오 류 를 보고 하 겠 지.
결론:explicit 는 다른 사람 에 게 벽 을 사이 에 두 고 우리 집 돈의 수량 을 수정 하 는 것 을 허락 하지 않 습 니 다.수정 하려 면 반드시 방 에 들 어가 야 합 니 다.
2.mutable 키워드
mutable 은 클래스 의 비정 상 데이터 구성원 에 사 용 됩 니 다.일반 클래스 의 구성원 함수 가 const 로 밝 혀 지면 클래스 의 데이터 구성원 을 수정 하지 않 는 다 는 뜻 입 니 다.그러나 일반 구성원 함수 에서 클래스 의 비정 상 데이터 구성원 을 수정 하려 면 mutable 로 이 데이터 구성원 을 수식 할 수 있 습 니 다.다음 과 같 습 니 다.
#include <iostream>
class demo
{
public:
int getCnt() const
{
m_nCount++;
return m_nCount;
}
private:
int m_nCount;
};
int main()
{
return 0;
}
컴 파일 이 잘못 되 었 습 니 다test.cpp:13: :increment of data-member ‘demo::m_nCount' in read-only structure
그러나 다음 코드 로 바 뀌 면:
#include <iostream>
class demo
{
public:
int getCnt() const
{
m_nCount++;
return m_nCount;
}
private:
mutable int m_nCount;
};
int main()
{
return 0;
}
int 형식 앞 에 mutable 키 워드 를 추가 하면 컴 파일 이 통 과 됩 니 다.결론:mutable 은 고정된 집에 가 변 적 인 물건 을 놓 을 수 있 도록 해 줍 니 다.
c++에 있 는 explicit 와 mutable 키워드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 c++explicit 와 mutable 키워드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C\#에서 explicit 와 implicit 의 깊 은 이해암시 적 변환 은 불필요 한 강제 변환 을 없 애 는 것 을 통 해 소스 코드 의 가 독성 을 높 일 수 있다.그러나 암시 적 전환 은 프로그래머 가 하나의 유형 을 다른 유형 으로 강제 전환 할 필요 가 없 기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.