1

次のクラスを受講します。

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

4

1 に答える 1

6

Foo foo();は、a を返し、Foo引数を取らない関数の前方宣言であるためです。代わりに使用Foo foo;すると、エラーが発生します。

于 2013-04-02T05:30:13.880 に答える