C ++中是简单类型变量对象吗?

时间:2011-02-26 19:47:49

标签: c++ object simpletype

C ++中的简单类型变量对象是什么?

int x = 0;

显然,这取决于对象的定义。那么x在这种情况下会成为对象吗?它可能没有以任何方式由标准定义,但如果您确定这是对象或不是对象,请声明如此。

3 个答案:

答案 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),则声明称为函数声明,否则称为对象声明。

所以,你所拥有的是一个对象声明(也恰好是一个对象定义)。