【发布时间】:2020-01-05 17:14:33
【问题描述】:
临时实现转换是一种标准转换,请参见第 7.3 节标准转换; 7.3.4[conv.rval]:
T类型的纯右值可以转换为T类型的 xvalue。 此转换通过评估以临时对象作为其结果对象的纯右值,从纯右值初始化一个T类型的临时对象([class.temporary]),并产生一个表示临时对象的xvalue。T应该是一个完整的类型。
但是为什么标准转换序列列表中没有提到呢?
见[conv]/1:
标准转换序列是按以下顺序的标准转换序列:
从以下集合中进行零次或一次转换:左值到右值的转换、数组到指针的转换和函数到指针的转换。
以下集合中的零个或一个转换:整数提升、浮点提升、整数转换、浮点转换、浮点整数转换、指针转换、指针到成员的转换和布尔转换。
零或一函数指针转换。
零或一次资格转换。
是否因为必须以任何一种方式创建对象,因此不会影响确定转换顺序是否优于另一个?
【问题讨论】:
-
你能把你的问题自成一体吗?
-
临时实现不是“转换”操作。那么,如果不是转换,为什么会在“标准转换序列”中呢?
-
所有问题的相关部分应该是in问题。 不是指向外部网站的链接。
-
@NicolBolas 标准将其称为转换:eel.is/c++draft/conv.rval 实际上在标题
standard conversions下。 -
我认为你误解了它的意思。转换是从纯右值到极值。这种转换涉及临时实现,但临时实现不是目标。
标签: c++ language-lawyer implicit-conversion