繁体   English   中英

在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM