我的构造函数至少指定了一个构造值,但它可以是默认构造的

Tre*_*key 1 c++ constructor class default-value default-constructor

参加以下课程:

class Foo{
public:
    Foo(std::string bar_, int baz_ = 7)
    :bar(bar_)
    ,baz(baz_)
    {}

private:
    std::string bar;
    int baz;
};
Run Code Online (Sandbox Code Playgroud)

Foo(std :: string bar_,int baz_ = 7); 是我唯一的构造函数,编译器不应该为我实现默认构造函数吧?我认为构建这个类的唯一两种方法是:

Foo foo("foo");  
//or  
Foo foo("foo",0);  
//plus copy constructor and overloaded assignment operator.
Run Code Online (Sandbox Code Playgroud)

然而,为什么这可能呢?

int main(){

    Foo foo();
}
Run Code Online (Sandbox Code Playgroud)

当唯一的公共构造函数需要第一个参数的值时,我不明白如何默认构造一个类.将默认构造函数设为私有或尝试使用C++ 11删除它,没有任何区别.这是怎么回事?
http://ideone.com/CL7IZo

Ed *_* S. 6

因为Foo foo();是函数的前向声明,它返回a Foo并且不带参数.Foo foo;相反,请使用,您将收到错误消息.