c++에서 explicit 와 mutable 키워드 에 대한 심도 있 는 탐구

오늘 은 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 키워드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기