explicit #
암시적으로 클래스 타입으로의 형변환을 막는 키워드 입니다.비교적 C++표준의 후반부에 채택된 사항이며 클래스의 생성자에 사용하는
키워드 입니다.
키워드 입니다.
어떤 타입(객체)에서 특정 타입으로의 암시적인 형변환은 파라미터가 1개인
생성자에 근거하여 이루어 집니다.
생성자에 근거하여 이루어 집니다.
#include <iostream> using namespace std; class CInt { public: CInt() {} CInt(int n) : n_(n) {} ~CInt() {} operator int() { return n_; } private: int n_; }; int main() { CInt Number; // 파라미터가 1개인 생성자인 // CInt(int n)에 근거하여 암시적인 // 형변환이 이루어 집니다. Number = 34; // operator int()의 변환연산자를 통하여 // CInt객체가 int 형으로 암시적으로 형변환이 // 가능합니다. int n = Number; }
CInt 클래스에서는 int 형에서 CInt형으로의 변환이 타당해 보입니다.
허나 다음 예제를 보시면 ...
#include <iostream> using namespace std; // String 타입의 배열객체 class StringVector { public: // 디폴트생성자 StringVector() {} // n개의 String형의 배열 객체를 생성합니다. explicit StringVector(int n) {} ~StringVector() {} }; int main() { StringVector vec; // 이것은 아무의미가 없습니다. // 컴파일러에 의해 막아줘야 합니다. // 이때 사용하는 것이 // explicit 키워드 입니다. // 아래의 문장은 컴파일러에 의해 에러를 보고 할것 입니다. vec = 34; }
String 타입의 배열객체에 대해 int타입을 대입하는것은 의미가 없습니다.
그러나 파라미터가 한개인 생성자에 의해 암시적으로 형변환이 가능합니다.
그러나 파라미터가 한개인 생성자에 의해 암시적으로 형변환이 가능합니다.
이것을 막아주기 위해서는 파라미터가 한개인 생성자에 explicit 제한자를 부여해
암시적인 형변환을 막아줍니다.
암시적인 형변환을 막아줍니다.
'Dev > C++' 카테고리의 다른 글
operator overloading 1 (0) | 2008.05.01 |
---|---|
Conversion Functions - 변환함수 (0) | 2008.05.01 |
template (0) | 2008.05.01 |
functor - 함수객체 (0) | 2008.05.01 |
Casting operators (0) | 2008.05.01 |