次のクラスを受講します。
class Foo{
public:
Foo(std::string bar_, int baz_ = 7)
:bar(bar_)
,baz(baz_)
{}
private:
std::string bar;
int baz;
};
Foo(std::string bar_, int baz_ = 7);以来 私の唯一のコンストラクターです。コンパイラーは私のためにデフォルトのコンストラクターを実装すべきではありませんか? このクラスを構築できる唯一の2つの方法は次のとおりだと思います。
Foo foo("foo");
//or
Foo foo("foo",0);
//plus copy constructor and overloaded assignment operator.
しかし、なぜこれが可能なのでしょうか。
int main(){
Foo foo();
}
唯一のパブリックコンストラクターが最初のパラメーターの値を必要とする場合に、クラスをデフォルトで構築する方法がわかりません。デフォルトのコンストラクターをプライベートにするか、C++11 で削除しようとしても、違いはありません。これはどのように起こっていますか?
http://ideone.com/CL7IZo