C ++中的简单类型变量对象是什么?
int x = 0;
显然,这取决于对象的定义。那么x
在这种情况下会成为对象吗?它可能没有以任何方式由标准定义,但如果您确定这是对象或不是对象,请声明如此。
答案 0 :(得分:10)
是(标准中的对象只是存储区域 - 1.8 / 1)
对象是存储区域。 [注意:函数不是对象,无论它是否以对象的方式占用存储。 ]一个对象由定义, new-expression _或者在需要时通过实现创建。
对于变量(3/4)
名称是使用表示实体或标签的标识符。 变量由对象声明引入。变量的名称表示对象。
对于好奇,该定义继承自C(C ++需要修改)。 C 90标准规定:
对象:执行环境中的数据存储区域,其内容可以 代表价值观。
答案 1 :(得分:2)
从1.8.1开始
-1- C ++程序中的构造创建,销毁,引用,访问和操作对象。对象是存储区域。 [注意:函数不是对象,无论它是否以对象的方式占用存储。 ]一个对象由定义(basic.def),new-expression(expr.new)或实现(class.temporary)在需要时创建。创建对象时确定对象的属性。对象可以有一个名称(子句为基本)。对象具有影响其生命周期(basic.life)的存储持续时间(basic.stc)。对象具有类型(basic.types)。术语对象类型是指用于创建对象的类型。
这也是3.9.1中声明的隐含内容:
类型描述对象(intro.object),引用(dcl.ref)或函数(dcl.fct)。
显然,对于“对象”来对除引用或函数之外的所有类型进行分组,它必须包括int
等。
值得注意的是,像int
这样的基本类型不是“面向对象”意义上的对象,但这一点很明显,因为它们与C语言中的相同,而不是面向对象的语言。
答案 2 :(得分:0)
是的,确实如此。根据§7/ 5:
如果decl-specifier-seq包含typedef说明符,则声明称为typedef声明,并且每个init-declarator的名称声明为typedef-name,与其关联类型(7.1.3)同义。如果decl-specifier-seq不包含typedef说明符,如果与名称关联的类型是函数类型(8.3.5),则声明称为函数声明,否则称为对象声明。
所以,你所拥有的是一个对象声明(也恰好是一个对象定义)。