1

단일 인수 생성자 또는 여러 인수를 갖는 생성자에서 발생할 수있는 암시 적 형식 변환을 피하기 위해 명시 적 키워드 사용을 이해합니다. 첫 번째에만 기본값이 없습니다.

그러나 기본 값이있는 단일 인수 생성자가 암시 적 변환에 대한 기본값이없는 것과 동일한 동작을하는지 궁금합니다.기본값을 가진 단일 인수 생성자가 암시 적 형식 변환의 영향을받을 수 있습니까?

답변

4

기본값의 존재는 암시 적 변환에 단일 인수 ctor가 사용되는 것을 중지하지 않습니다.이를 중지하려면 explicit을 추가해야합니다. 예를 들어

... :

#include <iostream> 

struct X { 
    int i; 
    X(int j=23): i(j) {} 
}; 

void f(struct X x) { 
    std::cout << x.i << std::endl; 
} 

int main() { 
    f(15); 
    return 0; 
} 

컴파일하고 제대로 실행 :

$ g++ -Wall -pedantic a.cc 
$ ./a.out 
15 
$ 

올바르게, 즉, 당신이 암시 적으로 struct X가되기 위해 int을 원하는 합니다. =23 부분, 즉 생성자에 대한 하나의 인수에 대한 기본값은 이것을 차단하지 않습니다.

+0

결국, 기본값을 가진 단일 인수 생성자는 "단일 인수 생성자"입니다. –