【问题标题】:Difference between two ways of using default constructor两种使用默认构造函数的区别
【发布时间】:2014-07-27 16:49:39
【问题描述】:

使用默认构造函数定义“Person”类的对象有什么区别:

方法一:

Person person = Person();

方法二:

Person person();

当我在默认构造函数中初始化一些变量并尝试访问这些变量或通过主例程中的 get/set 方法设置这些变量时,我在方法 2 中遇到编译错误,但方法 1 有效。

谢谢。

【问题讨论】:

标签: c++


【解决方案1】:
Person person = Person();

这声明了一个名为personPerson 对象。它用Person() 创建的临时对象初始化这个对象。这意味着它将调用 Person 的复制/移动构造函数(可能会被省略)。

Person person();

这声明了一个名为person函数,它返回一个Person 对象。这不是对象的声明。

你很可能想要这个:

Person person;

这声明了一个名为personPerson 对象,它是默认构造的。

您可能希望使用 C++11 中引入的新“统一”初始化语法,它可以避免变量和函数声明之间的歧义:

Person person{};

最后,如果你是AAA-- mind,你可能想要使用 Herb Sutter 提出的风格:

auto person = Person{};

【讨论】:

  • 值得指出的是,不忽略复制/移动的编译器如今可能毫无价值。
  • @chris 你知道什么时候你的思考速度比你的写作速度更快,最终会错过一些东西吗?事情发生了。
  • 可能提到Person person{}
  • @Deduplicator 或 auto person = Person{}; ;-) 开个玩笑,author of this answer is on record 不喜欢它。
  • @TemplateRex 还是添加了它。 ;)
猜你喜欢
  • 2016-02-08
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多