繁体   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