![](/img/trans.png)
[英]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.