【发布时间】:2013-03-23 07:30:18
【问题描述】:
参加以下课程:
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); 是我唯一的构造函数,编译器不应该为我实现默认构造函数,对吧?我认为我可以构造这个类的唯一两种方法是:
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
【问题讨论】:
-
symbol
fooin main 是一个函数,而不是 Foo 类型的实例。 -
尝试在没有括号的情况下实例化你的对象(我什至怎么用英文写),然后阅读en.wikipedia.org/wiki/Most_vexing_parse :)
-
为什么在过去 10 小时内出现了 3 次确切的语法问题?
-
别担心。我们大多数人都经历过这种讨厌的启蒙。
-
@Koushik ohhhhhh... 语法之子!
标签: c++ class constructor default-value default-constructor