在C ++中初始化对象

时间:2018-10-22 20:32:18

标签: c++ object initialization

在c ++中有多种初始化对象的方法。下面有两个示例,ent1和ent2。我想知道两者之间有什么区别,并且其中一个比另一个更“正确”或更受欢迎吗?

class Entity {
public:
    int h;
    Entity(int health) : h(health) { }
}

Entity ent1(10);

Entity ent2 = Entity(10);

1 个答案:

答案 0 :(得分:2)

在C ++ 17中,这两者是相同的。但是,在C ++ 17之前的版本中,存在以下细微差别:

下面的一个是副本构造函数。这将创建一个匿名实体,然后将其复制到ent2,尽管在copy epsilon的约束下可以省略该副本。

Entity ent2 = Entity(10);

下面的一个是直接实例化,ent1的内存将被分配,值10将被放置在构造函数指定的区域中。

Entity ent1(10); 

在C ++ 17之前的版本中,首选Direct的原因是因为它不需要额外的复制步骤。这种优势在C ++ 17中是不存在的。