티스토리 뷰

개발/일상

c++ explicit 이란?

clucle 2019. 7. 27. 14:35

c++ class 에서 생성자를 만들어 두면, 필요할 때 자동으로 형 변환을 시키는데, 이를 막는것이 explicit 키워드이다

 

아래 예시를 보자

 

- Event 클래스 대신 string을 넣었지만 자동으로 형변환이 되서 잘 실행된다

#include <iostream>
#include <string>

class Event {
public:
    Event(std::string name) : name_(name) {};
    std::string getName() { return name_; };
private:
    std::string name_;
};

std::string getEventName(Event e) {
    return e.getName();
}

int main() {
    std::string str = "print my name\n";
    std::cout << getEventName(str);
    // result
    // print my name
}

 

- explicit 키워드를 사용하면 자동 형 변환을 막아준다

#include <iostream>
#include <string>

class Event {
public:
    explicit Event(std::string name) : name_(name) {};
    std::string getName() { return name_; };
private:
    std::string name_;
};

std::string getEventName(Event e) {
    return e.getName();
}

int main() {
    std::string str = "print my name\n";
    std::cout << getEventName(str);
    // result
    // explicit.cpp:18:18: error: no matching function 
    // for call to 'getEventName' std::cout << getEventName(str);
}

 

명시적으로 선언을 한 뒤에 사용해야 할 때 explicit 키워드를 사용하도록 하자

'개발 > 일상' 카테고리의 다른 글

백준 학교 랭킹 30위 달성  (2) 2019.08.24
boost shared_from_this() bad_weak_ptr Exception 문제 해결  (0) 2019.08.13
boost::thread bind object  (0) 2019.08.07
Boost noncopyable  (0) 2019.07.19
개발 블로그 새로 시작!!  (0) 2019.07.19
댓글