728x90
반응형
묵시적 형 변환
앞선 포스팅에서 설명했던 대입을 사용한 객체의 초기화와 괄호를 사용하여 인자를 전달하는 초기화는 결과적으로 같다고 했다.
이렇게 되는 이유는 대입을 사용해도 묵시적으로 괄호를 사용한 것처럼 변환되기 때문이다.
묵시적 형 변환을 사용하면 편리하긴 하지만 코드가 자동으로 변환되는 것이 항상 좋은 일은 아니다.
따라서 묵시적 형 변환을 금지하고 싶다면 explicit 키워드를 사용할 수 있다.
explicit
explicit 키워드는 생성자를 선언할 때 생성자 앞에 붙여서 사용할 수 있다.
class AAA {
private:
int num;
public:
explicit AAA(int n)
:num(n)
{ }
}
위 코드와 같이 작성했다면 아래와 같은 선언은 불가능하게 된다.
AAA a = 5;
마찬가지로 복사생성자에도 사용하는 것이 가능하다.
class AAA {
private:
int num;
public:
explicit AAA(const AAA ©)
:num(copy.num)
{ }
}
따라서 위 코드처럼 사용하면 더 이상 아래 코드처럼 객체를 생성하는 것이 불가능하다.
AAA a;
AAA b = a;
728x90
반응형
'C++ > C++ 문법' 카테고리의 다른 글
[C++] 객체 내에서 static 변수, static 멤버함수 (0) | 2024.05.03 |
---|---|
[C++] 얕은 복사, 깊은 복사 (0) | 2024.05.02 |
[C++] 복사 생성자를 활용한 객체의 대입 (0) | 2024.04.29 |
[C++] this 포인터, 메서드 체이닝(Method Chaining), *this의 의미 (0) | 2024.04.29 |
[C++] 객체 배열 (0) | 2024.04.29 |