한 가지 이유 : 경우에 여러 인자 생성자는 또한 몇 가지 기본 생성자의 종류에 변환 생성자를 생성자를 변환, 각자가 기본값이 여러 parametres을 받아들이는 생성자가 있다고 가정한다 다 치지 않기 때문입니다.
첫 번째 매개 변수에 대한 기본 인수가있는 경우 필요한 이유 중 하나입니다.생성자 컨스트럭터 지지만, 여전히
struct A {
explicit A(int = 0); // added it to a default constructor
};
C++ 0X 다중 파라미터 생성자를위한 그것의 실제 사용한다 생성자
변환으로서 사용될 수있다. C++ 0x에서
이니셜 라이저 목록을 사용하여 클래스 객체를 초기화 할 수 있습니다. 당신이
= { ... }
를 사용하는 경우 철학은 다음 개념적 개체의 추상적 인 값을 나타냅니다 "복합 값"의 일종으로 객체를 초기화하고, 당신이 형식으로 변환 한 것인지,
이 예제이 방법으로
struct String {
// this is a non-converting constructor
explicit A(int initialLength, int capacity);
};
struct Address {
// converting constructor
Address(string name, string street, string city);
};
String s = { 10, 15 }; // error!
String s1{10, 15}; // fine
Address a = { "litb", "nerdsway", "frankfurt" }; // fine
을 고려, C + +0는 C++ 03의 결정은 다른 생성자에 명시 적으로 허용하는 것을 보여준다는 전혀 나쁜 생각하지 않았다 .
이 왜 방지해야 하는가? – Falmarri
Falmarri : 예방되지 않으면 기본 생성자 또는> = 2 매개 변수 생성자에서 유용 할 수있는 예제가 있습니까? –
Adrian의 답변을 참조하십시오. 왜 그것을 막아야합니까? – Falmarri