반응형
explicit keyword
이번 포스팅은 explicit 키워드에 대해서 알아보겠다. 짧게 설명하자면 explicit 키워드는 컴파일러에 의한 자동 형변환이 일어나지 않도록 해준다.
다음 코드를 보자.
#include <iostream>
using namespace std;
class Test
{
public:
Test(int n){
mNumber = n;
};
int mNumber;
};
void func(Test t){
wcout << t.mNumber << endl;
}
int main()
{
int k = 2;
func(k);
return 0;
}
컴파일러는 func(k) 호출 부분에서 Test 에 대한 형변환을 자동으로 수행하고 넘기도록 한다. 그래서 Test 클래스의 생성자가 자동으로 호출되게 된다.
하지만 프로그램 개발자는 그것이 원치않는 행동일 수도 있다. 그렇기에 이러한 자동 형변환을 막기 위해서 explicit 키워드를 사용할 수 있다. 다음 코드를 보자.
#include <iostream>
using namespace std;
class Test
{
public:
explicit Test(int n){
mNumber = n;
};
int mNumber;
};
void func(Test t){
wcout << t.mNumber << endl;
}
int main()
{
int k = 2;
func(k);
return 0;
}
위 코드를 수행하면 컴파일 시 에러가 발생한다. 위 코드를 정상적으로 호출하기 위해서는 func(k) 가 아닌 func(Test(k)) 로 수정해야 올바르게 컴파일된다.
반응형
'프로그래밍 > C/C++' 카테고리의 다른 글
[C++] 스마트포인터 weak_ptr [정보공유의 장] (0) | 2022.01.17 |
---|---|
[C++] 스마트포인터 unique_ptr [정보공유의 장] (0) | 2022.01.16 |
[C++] 스마트포인터 shared_ptr - 정보공유의 장 (0) | 2022.01.15 |
C++ template with member function (0) | 2022.01.13 |
C++ Template and Integral_constant (0) | 2022.01.12 |