我试图研究它。.但是我认为一切都是c ++中的对象。 像(int,float)是标量对象..etc。
但是,当我们创建类的实例时,文档将引用c ++中的“使用构造函数初始化对象”。到底是什么意思。
答案 0 :(得分:4)
我认为一切都是c ++中的对象
按照标准的字母,“对象”是“存储区域”。您可以在[intro.object]
下阅读详细信息。
但是按照外行的说法,是的,你是对的。
like(int,float)是标量对象。等。
绝对。 int
是一个对象。 float
是一个对象。
(当然,int
和float
本身是类型。)
但是当我们创建类的实例时,文档将引用c ++中的“使用构造函数初始化对象”。
这没什么错。您可以初始化int
,也可以初始化float
,并且可以初始化类类型的对象。对于后一种情况,一种方法是使用构造函数。那什么都没改变。
这实际上是什么意思。
它的确切含义是:执行为某个对象赋予初始值所需的步骤。
我也要提醒您,网络上C ++存在很多糟糕的“文档”(特别是糟糕的教程等),因此您也可能遇到措辞不当或措辞不正确的问题。文本。请注意,即使在您问题的评论部分,也有人错了。
答案 1 :(得分:1)
一切都是c ++中的对象。...就像(int,float)是标量的 对象
这是错误的。 int
和float
是内置类型。用户可以定义自己的类型,例如:
struct A {};
这里,A
是用户定义的类型。这不是一个对象!
对象是类型的实例:
A a;
int i;
在这里,a
和i
是A
和int
类型的对象。初始化类型为A
的对象时,这意味着您实例化了类A
并通过调用类构造函数之一对其进行了初始化。
另一个例子:
std::vector<int> v {1,2,3}
在这里,通过调用类v
的构造函数,使用值std::vector<int>
初始化类型{1,2,3}
的对象std::vector<int>
。
答案 2 :(得分:-2)
在C ++中创建对象有两个步骤:
1)找到一些包含该对象的内存。
这可以是函数的堆栈框架中用于局部对象的空间,也可以是用于全局对象的数据段的空间。在这种情况下,编译器会处理该问题。或operator new
用于动态创建对象并分配一些内存。如果您在任何地方编写“ new Foo()”,都是这种情况。
2)“使用构造函数初始化对象”
这只是意味着构造函数被调用。步骤1的地址将以this
的形式传递给构造函数以及您指定的所有参数。如果没有构造函数,则在可能的情况下使用默认构造函数。