Share via


명시적 (C++)

하나의 매개 변수를 자동으로 포함 하는 C++ 생성자가 암시적 형식 변환을 수행 합니다.예를 들어, 사용자가 전달 하는 경우는 int 생성자 문자열 포인터 매개 변수를 필요로 하는 경우 컴파일러가 있어야 변환 합니다 코드를 추가 합니다는 int 를 문자열 포인터입니다.그러나 하면 항상이 자동 문제를 사용할 필요가 없습니다.

추가 하 여 explicit 암시적 변환을 방지 하기 위해 생성자 선언 합니다.이 코드는 올바른 형식의 매개 변수를 사용 하거나 매개 변수를 올바른 형식으로 캐스팅 됩니다.즉, 캐스팅 코드를 시각적으로 표시 되지 않을 경우 오류가 발생 합니다.

explicit 키워드만 적용할 수 있습니다 클래스 생성자 선언 명시적으로 개체를 생성할 수 있습니다.

예제

다음 프로그램을 컴파일 오류가 발생 합니다.코드를 사용 하지만 암시적 변환 수행 하려고는 explicit키워드 수는 없습니다.이 오류를 해결 하려면 제거는 explicit 키워드의 코드를 조정 하 고 g.

// spec1_explicit.cpp
// compile with: /EHsc
#include <stdio.h>

class C 
{
public:
    int i;
    explicit C(const C&)   // an explicit copy constructor
    {
        printf_s("\nin the copy constructor");
    }
    explicit C(int i )   // an explicit constructor
    {
        printf_s("\nin the constructor");
    }

    C()
    {
        i = 0;
    }
};

class C2
{
public:
    int i;
    explicit C2(int i )   // an explicit constructor
    {
    } 
};

C f(C c)
{   // C2558
    c.i = 2;
    return c;   // first call to copy constructor
}

void f2(C2)
{
}

void g(int i)
{
    f2(i);   // C2558
    // try the following line instead
    // f2(C2(i));
}

int main()
{
    C c, d;
    d = f(c);   // c is copied
}

에 여러 개의 인수가 있는 생성자를 선언 합니다. explicit 이러한 생성자가 일부에서 암시적 변환을 사용할 수 없습니다 때문에 아무런 문제가 없습니다.그러나, explicit 인수는 기본값을 제외 하 고 생성자 여러 인수를 사용 하 고 모든 경우에 영향을 미칠 수 있습니다.

참고 항목

참조

C + + 키워드

변환