评估对象的创建意味着什么?

时间:2017-07-24 15:09:28

标签: c++ language-lawyer

我遇到了句子,“即使临时对象的创建未被评估”,在标准12.2中也没有得到他们的意思。

所以我读到了关于表达的内容,但我仍然没有得到他们所说的意思。我想,原因是我很难尝试对未评估的表达方式进行定义并将其应用于上述报价。

所以有人可以告诉我他们的意思是“即使临时对象的创建没有得到评估”吗?

背景信息:

  

类类型的临时数在各种上下文中创建:绑定a   引用prvalue(8.5.3),返回prvalue(6.6.3),a   转换,创建一个prvalue(4.1,5.2.9,5.2.11,5.4),抛出   异常(15.1),进入处理程序(15.3),在某些情况下   初始化(8.5)。 [注意:异常对象的生命周期是   在15.1中描述。 - 尾注]即使创作了   临时对象未评估(第5条)或以其他方式避免   (12.8),所有的语义限制都应该得到尊重   临时对象已创建并随后被销毁。 [注意:即使   所有的都没有调用析构函数或复制/移动构造函数   语义限制,例如可访问性(第11条)和是否   该功能被删除(8.4.3),应予以满足。但是,在   函数调用的特例,用作a的操作数   decltype-specifier(5.2.2),没有临时引入,所以   前述内容不适用于任何此类函数调用的prvalue。 -   结束说明]

1 个答案:

答案 0 :(得分:6)

在某些上下文中,您可以键入一个实际上并未在运行时执行的表达式。例如,sizeofdecltype的参数实际上并未执行。它们只是存在,因此编译器将计算结果的类型。

这些上下文被称为" unevaluated contexts"。那就是它在说什么。并且它说,即使在未评估的上下文中,构造对象的表达式仍然必须是对象初始化的有效形式。