对象和实例的定义

csg*_*guy 2 c++ class definition object object-lifetime

根据什么是C ++中的类和对象?

一个类就像一个蓝图,一个对象就像是用该蓝图建造的房屋。

您可以拥有许多具有相同布局/平面图的房屋(读取类),但每个房屋都是其自己的实例(读取对象)。每个人都有自己的所有者,家具等。

Note that there are also objects whose blueprint is not a class (e.g. integers).

In summary, there are different types of object (e.g. int, float, etc.). You can create user-defined types, called 'classes'.

In C++, the term object is used for instances of any type, including classes and fundamental types.

However, according to http://www.cplusplus.com/doc/tutorial/classes/

An object is an instantiation of a class. In terms of variables, a class would be the type, and an object would be the variable.

Isn't that statement inaccurate? An object could be an instantiation of a class, but it could also be an instance of a fundamental type.

那么什么是实例化?创建基本类型(例如int x = 3;)的实例是否被视为“实例化”?由于从技术上讲,它正在创建类型的实例。

bol*_*lov 8

对象是类型的实例。

继续您的问题:

那个陈述(cppreference之一)不准确吗?对象可以是类的实例化,但也可以是基本类型的实例。

你是对的。

另外,是否不会将基本类型的实例(例如int x = 3;)创建为“实例化”?由于从技术上讲,它正在创建类型的实例。

再次,正确。


个人建议:不必过多担心确切的定义,而将更多的精力花在“通过编写代码学习”上

实例化如何定义?

好的,由于您一直坚持,这是我的建议:

您在网上或书籍中发现的所有定义都不具有权威性。关于这些事情的唯一授权是C ++标准:一下N4713。如您所见,该标准过于技术性,难以解析和理解。之所以这样,是因为它绝不意味着要用于学习,而是要彻底且明确地定义语言的语法和语义。这是编译器实现者在编写用于将C ++源代码转换为机器代码的编译器时所使用的文档。

由于该标准不是学习C ++的方法,因此每个人都提出了自己的定义和术语,旨在更轻松地传达有时更为复杂的问题。这样做时,有时您看到的定义不完整,或略有错误,或者不适用于奇怪的极端情况。您会发现相同的术语在不同的作者中使用时略有不同。这是坏事吗?也许吧,但不是很多。学习时,掌握简单的概念和工具非常重要,这样您就可以一次完成一个步骤。失去“严格的彻底性”对于付出恕我直言是不小的代价,但是我看到这对于那些认真地学习每句话的人来说是多么的困惑。

回到您的问题:在标准中,就我所知,术语“实例化”在这种意义上并没有使用,而是用于“模板实例化”,这是另一回事。

但这没关系,我们不需要了解简单概念的标准。对于您的上下文,实例化是对象的创建。这是一个非常简单的概念,请不要过分考虑。

C ++标准出于不同的目的使用“实例化”,但是您仍然可以理解该概念。如果可以的话,给它起个别的名字。

  • @curiousguy我非常不同意。它可能是有缺陷的,并且包含不一致的地方(我不知道全部是不一致的),但这是国际标准化组织(International Organization for Standardization)维护的“标准”。它具有权威性。 (2认同)