理由の一つは確かに痛くないからです。
必要な理由の 1 つは、最初のパラメーターにデフォルトの引数がある場合です。コンストラクターはデフォルトのコンストラクターになりますが、変換コンストラクターとして引き続き使用できます
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 String(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++0x は、他のコンストラクターでの明示的な許可を許可するという C++03 の決定が、まったく悪い考えではなかったことを示しています。