반응형
explicit 키워드는 묵시적 형변환을 할 수 없게 만들고
명시적인 형변환만 가능하도록 만드는 것이다.
주로 생성자에 explict를 활용한다.
why?
의도하지 않은 오류를 방지하기 위함이다.
= 원하지 않은 형변환 제한
#include <iostream>
using namespace std;
class Task {
public:
Task(int n) : cnt(n) {};
int cnt;
void printCount(){
cout << cnt << endl;
}
};
void getCount(Task t) {
cout << t.cnt << endl;
}
int main() {
int n = 20;
getCount(n); // 20
int m = 30;
Task task = m;
task.printCount(); // 30
}
getCount(n) 함수의 인자로 들어오는 "20 (= n)"과
대입 연산자로 사용되는 "30 (= m)"
컴파일러가 생성자에서 "Task" 타입 변경하게 된다. (묵시적 형변환)
하지만 expilict 키워드 사용한다면
컴파일러가 자동으로 형변환 하는 것을 막을 수 있다.
사용자가 원치 않은 형변환을 방지하고
상황에 맞게 직접 형 변환을 해주도록 한다.
#include <iostream>
using namespace std;
class Task {
public:
explicit Task(int n) : cnt(n) {};
int cnt;
void printCount(){
cout << cnt << endl;
}
};
void getCount(Task t) {
cout << t.cnt << endl;
}
int main() {
int n = 20;
getCount(n); // error
int m = 30;
Task task = m;
task.printCount(); // error
}
빌드 하기전부터 에러메시가 보인다.
(Task)n과 같이 명시적 형변환이 필요하다.
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 생성자 함수 (2) | 2024.06.03 |
---|---|
[C++] constexpr 키워드 (2) | 2024.04.01 |
[C++] 네임스페이스(namespace) 활용 (0) | 2022.08.09 |
[C++] 인라인(inline) 함수 (0) | 2022.08.06 |
[C++] 디폴트 파라미터(default parameter) (0) | 2022.08.05 |
댓글