반응형
explicit

묵시적 형변환을 할 수 없게 만들고 명시적인 형변환만 가능하도록 만드는 것이다.

즉, 자신이 원하지 않는 형변환이 일어나지 않도록 제한하는 키워드이다.

예제
#include <iostream>

using namespace std;

class User
{
private:
	int m_UserSN;
public:
	User(int UserSN) :m_UserSN{ UserSN } {};
	
	int GetSN() { return m_UserSN; }
};

void	PrintUser(User user) {
	cout << user.GetSN() << endl;
}

int main()
{
	int n = 30;
	PrintUser(n);
}

PrintUser(User user) 함수의 인자로 들어오는 int n = 30 이라는 숫자가 User 형태로 바뀌게 됩니다.

이때 생성자 User(int UserSN)을 통해서 바뀌게 됩니다.

#include <iostream>

using namespace std;

class User
{
private:
	int m_UserSN;
public:
	explicit User(int UserSN) :m_UserSN{ UserSN } {};
	
	int GetSN() { return m_UserSN; }
};

void	PrintUser(User user) {
	cout << user.GetSN() << endl;
}

int main()
{
	int n = 30;
	PrintUser(n);	// Error
}

explicit 키워드를 사용함으로써 컴파일러가 알아서 형변환 하는 것을 막을 수 있습니다.

이처럼 explicit 키워드 없이 사용한다면 사용자가 원치 않은 형변환이 일어나는 등 예기치 않은 버그가 발생할 수 있기 때문에 사용해 주는 것이 좋습니다.

#include <iostream>

using namespace std;

class User
{
private:
	int m_UserSN;
public:
	explicit User(int UserSN) :m_UserSN{ UserSN } {};
	
	int GetSN() { return m_UserSN; }
};

void	PrintUser(User user) {
	cout << user.GetSN() << endl;
}

int main()
{
	int n = 30;
	PrintUser(static_cast<User>(n));
}

explicit 키워드를 사용한다면 사용자가 상황에 맞게 직접 형변환을 해주어야 합니다.

반응형

'C, C++' 카테고리의 다른 글

[C#] delegate (대리자)  (0) 2022.10.11
[C#] ThreadPool 클래스  (0) 2022.07.04
[C/C++]스마트 포인터(smart pointer)  (0) 2021.11.22
[C/C++] accumulate 사용법과 주의사항  (0) 2021.07.09
[C/C++] stringstream 사용법  (0) 2021.07.03

+ Recent posts