C++ 为什么像cin、cout、string等东西被认为是对象?

C++ 为什么像cin、cout、string等东西被认为是对象?,c++,c++11,C++,C++11,根据我的理解(以及我的教科书所说的),对象是一个自包含的编程元素,它保存数据和对该数据执行操作的过程。既然如此,为什么像cin、cout、string等东西被认为是对象?按照我定义的方式,cin是一个对象吗?cin是在iostream头文件的源代码中找到的一个自包含单元的名称,它保存数据和对该数据执行操作的过程 cin和cout是变量,因此它们是对象 A对象,C++中,不一定是存储的连续区域,以类型的形式关联内容解释。 这是C++标准定义的一个术语。 C++11§1.8/1 “C++程序中的构

根据我的理解(以及我的教科书所说的),对象是一个自包含的编程元素,它保存数据和对该数据执行操作的过程。既然如此,为什么像cin、cout、string等东西被认为是对象?按照我定义的方式,cin是一个对象吗?cin是在iostream头文件的源代码中找到的一个自包含单元的名称,它保存数据和对该数据执行操作的过程

cin
cout
是变量,因此它们是对象

A<强>对象,C++中,不一定是存储的连续区域,以类型的形式关联内容解释。

这是C++标准定义的一个术语。 C++11§1.8/1 C++程序中的构造创建、销毁、引用、访问和操作对象。一个物体是一个物体 存储区域。[注:函数不是对象,无论它是否占用 对象的方式。-结束注释]对象由定义(3.1)、新表达式(5.3.4)或 在需要时通过实施(12.2)。对象的属性是在对象处于活动状态时确定的 创建。对象可以有名称(第3条)。对象的存储持续时间(3.7)会影响 它的寿命(3.8)。对象具有类型(3.9)。术语“对象类型”是指对象所使用的类型 是创建的。一些对象是多态的(10.3);该实现生成与 每个这样的对象,使得在程序执行期间可以确定该对象的类型。其他 对象中的值的解释取决于表达式的类型(第5条) 用于访问它们

非连续的东西主要是支持多重继承,但在与我的讨论中,至少有一位委员会成员强烈主张,它旨在支持使对象总体上不连续。然而,据我所知,没有现存的编译器可以做到这一点。这对我来说似乎毫无意义


std::string
不是对象,而是类型



注意:对于一些其他编程语言,以及在一般的计算机科学中,“对象”一词通常表示类类型的实例。在C++中,甚至非类类型的实例,如<代码> int >代码>,都是对象。

< p> <代码> CIN < /C>和 CUT是变量,因此它们是对象。

A<强>对象,C++中,不一定是存储的连续区域,以类型的形式关联内容解释。

这是C++标准定义的一个术语。 C++11§1.8/1 C++程序中的构造创建、销毁、引用、访问和操作对象。一个物体是一个物体 存储区域。[注:函数不是对象,无论它是否占用 对象的方式。-结束注释]对象由定义(3.1)、新表达式(5.3.4)或 在需要时通过实施(12.2)。对象的属性是在对象处于活动状态时确定的 创建。对象可以有名称(第3条)。对象的存储持续时间(3.7)会影响 它的寿命(3.8)。对象具有类型(3.9)。术语“对象类型”是指对象所使用的类型 是创建的。一些对象是多态的(10.3);该实现生成与 每个这样的对象,使得在程序执行期间可以确定该对象的类型。其他 对象中的值的解释取决于表达式的类型(第5条) 用于访问它们

非连续的东西主要是支持多重继承,但在与我的讨论中,至少有一位委员会成员强烈主张,它旨在支持使对象总体上不连续。然而,据我所知,没有现存的编译器可以做到这一点。这对我来说似乎毫无意义


std::string
不是对象,而是类型



注意:对于一些其他编程语言,以及在一般的计算机科学中,“对象”一词通常表示类类型的实例。在C++中,甚至非类类型的实例,如<代码> int >代码>,都是对象。

它们被认为是对象,因为它们是“对象”。它们不是类型,而是实例

您可以看到它们是如何定义的

例如:

extern std::istream cin;
extern std::wistream wcin;
如您所见,
cin
是一个类型为
std::istream
的变量

关于您对
std::string
的假设:再次


我们可以看到
std::string
不是变量/对象,而是
std::basic_string
的类型别名。

它们被视为对象,因为它们是“对象”。它们不是类型,而是实例

您可以看到它们是如何定义的

例如:

extern std::istream cin;
extern std::wistream wcin;
如您所见,
cin
是一个类型为
std::istream
的变量

关于您对
std::string
的假设:再次


我们可以看到
std::string
不是变量/对象,而是
std::basic_string
的类型别名。

string
不同,它们是类的实例,而
string
是类。
std::string
不是对象,它是
std::basic_string
的类型别名。这是一门课。和分别是和类的特殊实例。错误假设1:
string
不被视为对象。错误假设2:“考虑”,因为C++标准精确地定义了术语对象。艾伦指出C++中对象的定义可能与其他语言中的对象不同,尤其是面向对象的语言。