【发布时间】:2018-09-22 22:17:49
【问题描述】:
想象一下这个类:
class Entity {
public:
int x, y;
Entity() : x(0), y(0) { }
Entity(int x, int y) : x(x), y(y) { }
}
这里有多种用我认为我知道的初始化类的方法:
Entity ent1; //Uses the default constructor, so x=0 and y=0
Entity ent2(); //Uses the default constructor, so x=0 and y=0 (Not sure)
Entity ent3(1, 2); //Made constructor, so x=1 and y=2
Entity ent4 = Entity(); //Default constructor, so x=0 and y=0
Entity ent5 = Entity(2, 3); //Made constructor, so x=2 and y=3
我知道可以在堆内存上创建一个对象,但这不是我目前正在寻找的。p>
我的问题是,这些初始化对象的方式有什么区别?
我不确定何时应该使用哪一个。
【问题讨论】:
-
Entity ent2();是一个函数声明。 -
不,这意味着根本不存在
Entity,ent2是一个函数。 -
不,这意味着您正在声明一个名为
ent2的函数,它返回一个Entity。 -
您可以在 C++11 及更高版本中使用 {}。查找统一初始化。您提供的示例是 C++87(并且 MVP 可能允许变量 ent2,编译器不一致)
-
@JesperJuhl 这不是我的“个人”昵称。它基于 Stroustroup 的书籍第一期。本质上是他在 1986-1987 年首次描述的语言 IS C++87 。因为没有其他说明
标签: c++ class c++11 constructor initialization