N3797§13.3.3.1 over.best.ics说:
转换序列是第4条中定义的隐式转换。
然而,第4条定义了以下转换列表:
请考虑以下示例:
#include <iostream>
using namespace std;
struct A
{
operator int()
{
return 42;
}
};
A a;
int b = a; //User-defined conversion sequence applied
int main() { }只要用户定义的转换不属于一组标准转换,该示例中就不应用任何标准转换。那么,我提供的报价有什么意义呢?
发布于 2014-11-21 05:37:06
你遗漏的其他引文可能很有启发性:
§13.3.3.1/1隐式转换序列是将函数调用中的参数转换为被调用函数的相应参数类型的转换序列。转换序列是第4条()中定义的隐式转换,这意味着它受对象初始化规则或单个表达式(8.5、8.5.3)引用的约束。
条例草案第4条其实也提到这点。
3表达式
e可以隐式转换为类型T当且仅当声明T t=e;对于某些发明的临时变量t(8.5)来说格式良好。 6任何隐式转换的效果与执行相应的声明和初始化,然后使用临时变量作为转换的结果相同。如果T是lvalue引用类型或函数类型的rvalue引用(8.3.2),则结果是lvalue;如果T是对对象类型的rvalue引用,则为xvalue,否则为prvalue。表达式e被用作glvalue当且仅当初始化时使用它作为glvalue。
“全套此类转换”(列于第4条)指的是标准转换。记住,它说标准转换序列可以是空的。第13.3.3.1.2节描述了用户定义的转换序列.它包括:
https://stackoverflow.com/questions/27054485
复制相似问题