[英]Different ways of initializing an object with default constructor in C++
[英]Different ways to use default argument to a constructor in C++
以下三段代码相对于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的情况下则不会。 我没有使用者的特定代码,所以我自己也无法弄清楚。
在前两个中,您甚至没有调用构造函数,而是在声明一个函数:
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'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.