在c ++中有多种初始化对象的方法。下面有两个示例,ent1和ent2。我想知道两者之间有什么区别,并且其中一个比另一个更“正确”或更受欢迎吗?
class Entity {
public:
int h;
Entity(int health) : h(health) { }
}
Entity ent1(10);
Entity ent2 = Entity(10);
答案 0 :(得分:2)
在C ++ 17中,这两者是相同的。但是,在C ++ 17之前的版本中,存在以下细微差别:
下面的一个是副本构造函数。这将创建一个匿名实体,然后将其复制到ent2
,尽管在copy epsilon的约束下可以省略该副本。
Entity ent2 = Entity(10);
下面的一个是直接实例化,ent1
的内存将被分配,值10将被放置在构造函数指定的区域中。
Entity ent1(10);
在C ++ 17之前的版本中,首选Direct的原因是因为它不需要额外的复制步骤。这种优势在C ++ 17中是不存在的。