两种使用默认构造函数的方法之间的区别

时间:2014-07-27 16:49:40

标签: c++

定义一个类的对象" Person"之间的区别是什么?通过以下两种不同的方式使用其默认构造函数:

方法1:

Person person = Person();

方法2:

Person person();

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

感谢。

1 个答案:

答案 0 :(得分:11)

Person person = Person();

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

Person

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

你最有可能想要这个:

Person

这声明了一个名为Person person; 的{​​{1}}对象,它是默认构造的。

你可能想要使用新的"制服" C ++ 11中引入的初始化语法,它避免了变量和函数声明之间的歧义:

Person

最后,如果你有AAA头脑,你可能想要使用Herb Sutter提出的风格:

person