C++ explicit 의 이해

Joosi_Cool·2022년 9월 25일
2

C++

목록 보기
10/20
post-thumbnail

explicit란?

expilict 키워드를 사용한다면 컴파일러가 알아서 형변환 하는것을 막을 수 있다.
아래 코드를 보면 기본 생성자에 explicit를 하지 않는다면, 컴파일러 시 의도치 않은 형변환이 일어날 수 있다.

  • 명시적 형변환
    Tmp tmp1 = Tmp(1);
  • 묵시적 형변환
    Tmp tmp2 = 10;
  • 예제코드1
#include<iostream>
using namespace std;

class example {

private:
	int num;

public:
	explicit example() {
		num = 1;
	}

	explicit example(int num)
		:num{ num } {};

	void printNum() {
		cout << num << endl;
	}

};

int main() {
	

	example A(10);
	example B;
	B = 15; => error 묵시적 형변환 불가
    // B는 example타입을 주어야 하는데, int형 자료를 받을 수 없음.
    B = A;
    // 이것은 가능. A도 example타입이기 때문.


	A.printNum();
	B.printNum();


	return 0;

}
  • 예제코드2
#include<iostream>
using namespace std;

class example {

private:
	int num;

public:
	example() {
		num = 1;
	}

	example(int num)
		:num{ num } {};

	void printNum() {
		cout << num << endl;
	}

};

int main() {
	

	example A(10);
	example B;
	B = 10; => 묵시적 형변환 시행. error X


	A.printNum();
	B.printNum();


	return 0;

}
  • 정리
    explicit는 묵시적 형변환을 막아주는 역할을 한다.
    생성자 앞에 explicit가 선언되었다면, 이 생성자로 만든 변수들은 묵시적 형변환이 불가능하다.

  • 예시
    example A;
    A=10; => error
    Example B{5};
    A=B; =>가능
profile
집돌이 FE개발자의 노트

0개의 댓글