簡體   English   中英

兩種使用默認構造函數的方式的區別

[英]Difference between two ways of using default constructor

通過以下兩種不同方式使用其默認構造函數定義“ Person”類的對象有什么區別:

方法1:

Person person = Person();

方法2:

Person person();

當我在默認構造函數中初始化一些變量並嘗試訪問這些變量或通過主例程中的get / set方法設置這些變量時,方法2中出現編譯錯誤,但是方法1可以工作。

謝謝。

Person person = Person();

這聲明了一個稱為personPerson對象。 它使用Person()創建的臨時對象初始化此對象。 這意味着它將調用Person的copy / move構造函數(可能會被刪除)。

Person person();

這聲明了一個名為person函數 ,該函數返回一個Person對象。 這不是對象的聲明。

您最有可能要這樣:

Person person;

這將聲明一個名為personPerson對象,該對象是默認構造的。

您可能要使用C ++ 11中引入的新的“統一”初始化語法,該語法避免了變量聲明和函數聲明之間的歧義:

Person person{};

最后,如果您的想法是AAA ,則可能要使用Herb Sutter提出的樣式:

auto person = Person{};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM