본문 바로가기

지식창고/프로그래밍

(C++)explicit 키워드란?

반응형

의미 : 묵시적인 타입 변환을 하지 않고 명시적으로 타입 변환을 하였을 경우에만 사용하겠다는 뜻 입니다.

 

예제를 간단하게 작성해보았습니다~

 

사용 방법

#include <iostream>

 

 

using namespace std;

 

 

class SoSimple

{

private:

                  int num1;

                  int num2;

 

 

public:

                  SoSimple(int n1, int n2)

                                   :num1(n1), num2(n2)

                  {

                  }

 

 

                  SoSimple(SoSimple &copy)

                                   :num1(copy.num1), num2(copy.num2)

                  {

                                   cout << "SoSimple(SoSimple &copy) 호출됨\n";

                  }

 

 

                  void ShowSimpleData()

                  {

                                   cout << num1 << endl << num2 << endl;

                  }

};

 

 

int main(void)

{

                  SoSimple sim1(15, 30);

                  cout << "생성  초기화 " << endl;

                  SoSimple sim2 = sim1;

                  cout << "생성  초기화 " << endl;

                  sim2.ShowSimpleData();

 

 

                  return 0;

}

사용하는 이유와 특징

: 이와 같이 코딩 하였을 경우 SoSimple sim2 = sim1;  부분에서 타입이 묵시적으로 변환되어 삽입되게 됩니. 하지만 묵시적 변환이 생길수록 코드의 결과를 예측하기 어려워지기 때문 

코드의 명확함을 더하기 위하여 사용되는 키워드가 바로!! explicit 키워드인 것 입니다.

 

즉 아래와 같이 소스가 바뀌어야 정상 구동이 되는 것을 확인할 수 있습니다.

 

#include <iostream>

 

 

using namespace std;

 

 

class SoSimple

{

private:

                  int num1;

                  int num2;

 

 

public:

                  SoSimple(int n1, int n2)

                                   :num1(n1), num2(n2)

                  {

                  }

 

 

                  explicit SoSimple(SoSimple &copy)

                                   :num1(copy.num1), num2(copy.num2)

                  {

                                   cout << "SoSimple(SoSimple &copy) 호출됨\n";

                  }

 

 

                  void ShowSimpleData()

                  {

                                   cout << num1 << endl << num2 << endl;

                  }

};

 

 

int main(void)

{

                  SoSimple sim1(15, 30);

                  cout << "생성  초기화 " << endl;

                  SoSimple sim2(sim1);

                  cout << "생성  초기화 " << endl;

                  sim2.ShowSimpleData();

 

 

                  return 0;

}

전 소스에서 SoSimple sim2 = sim1; 부분을 explicit키워드를 사용하였기 때문에, SoSimple sim2(sim1);

사용하여야 에러 없이 구동이 된다는 차이점입니다.

 

여기서 SoSimple sim2 = sim1; SoSimple sim2(sim1); 같은 의미로 삽입되지만, 

explicit키워드를 사용하기 전과 사용하기 후에 묵시적 변환을 막기 위한 키워드를 사용해  차이입니다.

추가적으로 int num1 = num2; int num1(num2); 동일한 의미로 해석되는 것과 같은 이치 것 입니다.

 

explicit키워드에 대한 간단한 설명은 이것으로 끝내도록 하겠습니다~

 

프로그래밍은 언제나 자기 자신이 직접 코딩 해보시고 차이점도 보시고 하셔야 한다는 점!!!

 

잊지마세용~

반응형