以下三段代码与MSVC有什么区别?
代码1: Foo ctor定义为:
Foo::Foo(Bar &bar = Bar());
Foo ctor用作:
Foo foo = new Foo();
代码2: Foo ctor定义为:
Foo::Foo()
{
Bar bar = Bar();
Foo(bar);
}
Foo::Foo(Bar &bar);
Foo ctor用作:
Foo foo = new foo();
代码3: Foo ctor定义为:
Foo::Foo(Bar &bar);
Foo ctor用作:
Bar bar = Bar();
Foo foo = new foo(bar);
修改 对代码进行了更正。目的是解释这个想法,没有关注代码,所以犯了错误。对不起。
具体问题是弄清楚代码2和3之间的区别。由于某种原因,在代码2的情况下,Foo类ctor的消费者导致崩溃,而在代码3的情况下,它不会吨。我没有消费者的具体代码,所以无法自己解决。
答案 0 :(得分:3)
在前两个中,您甚至没有调用构造函数,而是声明了一个函数:
Foo foo(); // function foo, returns a Foo object
要默认构建Foo
,您需要
Foo foo; // C++11 and C++03
Foo foo{}; // C++11
您的大多数代码都是非法的,或者它没有达到预期效果。例如,除了创建本地Bar
变量bar
之外,此构造函数不执行任何操作,并尝试创建具有相同名称的实例类型Foo
:
Foo::Foo()
{
Bar bar = Bar(); // local variable bar
Foo(bar); // error: 'bar' has a previous declaration as 'Bar bar'
}