1
단일 인수 생성자 또는 여러 인수를 갖는 생성자에서 발생할 수있는 암시 적 형식 변환을 피하기 위해 명시 적 키워드 사용을 이해합니다. 첫 번째에만 기본값이 없습니다.
그러나 기본 값이있는 단일 인수 생성자가 암시 적 변환에 대한 기본값이없는 것과 동일한 동작을하는지 궁금합니다.기본값을 가진 단일 인수 생성자가 암시 적 형식 변환의 영향을받을 수 있습니까?
단일 인수 생성자 또는 여러 인수를 갖는 생성자에서 발생할 수있는 암시 적 형식 변환을 피하기 위해 명시 적 키워드 사용을 이해합니다. 첫 번째에만 기본값이 없습니다.
그러나 기본 값이있는 단일 인수 생성자가 암시 적 변환에 대한 기본값이없는 것과 동일한 동작을하는지 궁금합니다.기본값을 가진 단일 인수 생성자가 암시 적 형식 변환의 영향을받을 수 있습니까?
기본값의 존재는 암시 적 변환에 단일 인수 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
부분, 즉 생성자에 대한 하나의 인수에 대한 기본값은 이것을 차단하지 않습니다.
결국, 기본값을 가진 단일 인수 생성자는 "단일 인수 생성자"입니다. –