[英]Difference between two ways of using default constructor
通過以下兩種不同方式使用其默認構造函數定義“ Person”類的對象有什么區別:
方法1:
Person person = Person();
方法2:
Person person();
當我在默認構造函數中初始化一些變量並嘗試訪問這些變量或通過主例程中的get / set方法設置這些變量時,方法2中出現編譯錯誤,但是方法1可以工作。
謝謝。
Person person = Person();
這聲明了一個稱為person
的Person
對象。 它使用Person()
創建的臨時對象初始化此對象。 這意味着它將調用Person
的copy / move構造函數(可能會被刪除)。
Person person();
這聲明了一個名為person
的函數 ,該函數返回一個Person
對象。 這不是對象的聲明。
您最有可能要這樣:
Person person;
這將聲明一個名為person
的Person
對象,該對象是默認構造的。
您可能要使用C ++ 11中引入的新的“統一”初始化語法,該語法避免了變量聲明和函數聲明之間的歧義:
Person person{};
最后,如果您的想法是AAA ,則可能要使用Herb Sutter提出的樣式:
auto person = Person{};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.