C ++ 11标准库中值和对象的示例?

时间:2014-02-09 05:02:27

标签: c++ object c++11 language-lawyer

在C ++ 11 3p3中它声明:

  

实体是对象,引用,函数,枚举器,类型,类成员,模板,模板特化,命名空间,参数包或此。< / p>

在17.6.1.1p1中说明:

  

C ++标准库提供以下类型实体的定义:宏,,类型,模板,类,函数,对象

C ++标准库为(不是对象)和对话提供定义的值的示例是什么:C ++标准库为其定义的对象的示例是什么,不是值?

3 个答案:

答案 0 :(得分:3)

对象是存储在内存中的东西(参见1.8:“对象是存储区域”)。每个对象都有一个值(它本身),但值是更一般的,在每个表达式的评估给出一个值的意义上。例如,prvalue,例如声明函数f()的{​​{1}}的值,可能有也可能没有存储 - 你不能获取它的地址,它的存在可能不需要显示为存储。 (但是,一旦将值绑定到引用变量或形式参数,您现在可以通过名称引用该对象。)

差异主要是语言语义之一,但通常不具有实际意义。 (例如,人们经常引用“临时对象”,虽然“临时值”会更准确。)值和对象都有类型(总是对象类型),可以评估对象以产生值,以及value可以视为一个对象。在谈论语言的语法规则时,我会在谈论代码设计,分配和存储以及“价值”时使用“对象”。

答案 1 :(得分:3)

27.4.1 [iostreams.objects.overview] 中定义的标准iostream对象,例如cincoutcerr和{{1 (及其广泛的字符表兄弟)将是标准库定义的对象的示例。

同样, 27.5.3 [ios.base] 中定义的clog类型定义了多个std::ios_base::fmtflags值(例如constexpr)。

答案 2 :(得分:0)

C ++标准没有提供“价值”的定义,依赖于其普通的英语含义。它将“对象”定义为“存储区域”。

C ++标准库提供了许多非对象的值。一个简单的例子是NULL。其他包括SIZE_MAX,EXIT_SUCCESS和FE_OVERFLOW。您可能会对它们是否“已定义”进行狡辩,因为标准中提供的解释很少。

C ++标准库提供了一些我可以找到的对象的定义,就“存储区域”的名称而言。我所知道的唯一(由评论者提供)是“标准的iostream对象”,如cin和cout。

由于它包含C标准库,另一个显而易见的是errno,尽管这包括一个'errno可能不是对象的标识符'的狡辩。

标准库提供了大量函数,这些函数在执行时返回指向对象的指针,new和malloc()是明显的例子。因此,如果您愿意,它会定义许多动态对象。

[编辑以包含iostream对象,新]