본문 바로가기
프로그래밍 언어/C++

[C++] explicit 키워드

by 까망 하르방 2023. 1. 20.
반응형

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++ explicit
반응형

'프로그래밍 언어 > 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

댓글