当我们在c ++中说“初始化对象”时,这实际上意味着什么?

时间:2019-08-05 13:55:58

标签: c++ object

我试图研究它。.但是我认为一切都是c ++中的对象。 像(int,float)是标量对象..etc。

但是,当我们创建类的实例时,文档将引用c ++中的“使用构造函数初始化对象”。到底是什么意思。

3 个答案:

答案 0 :(得分:4)

  

我认为一切都是c ++中的对象

按照标准的字母,“对象”是“存储区域”。您可以在[intro.object]下阅读详细信息。

但是按照外行的说法,是的,你是对的。

  

like(int,float)是标量对象。等。

绝对。 int是一个对象。 float是一个对象。

(当然,intfloat本身是类型。)

  

但是当我们创建类的实例时,文档将引用c ++中的“使用构造函数初始化对象”。

这没什么错。您可以初始化int,也可以初始化float,并且可以初始化类类型的对象。对于后一种情况,一种方法是使用构造函数。那什么都没改变。

  

这实际上是什么意思。

它的确切含义是:执行为某个对象赋予初始值所需的步骤。

我也要提醒您,网络上C ++存在很多糟糕的“文档”(特别是糟糕的教程等),因此您也可能遇到措辞不当或措辞不正确的问题。文本。请注意,即使在您问题的评论部分,也有人错了。

答案 1 :(得分:1)

  

一切都是c ++中的对象。...就像(int,float)是标量的   对象

这是错误的。 intfloat是内置类型。用户可以定义自己的类型,例如:

struct A {};

这里,A是用户定义的类型。这不是一个对象!

对象是类型的实例:

A a;
int i;

在这里,aiAint类型的对象。初始化类型为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的形式传递给构造函数以及您指定的所有参数。如果没有构造函数,则在可能的情况下使用默认构造函数。