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() { }
只要用户定义的转换不属于一组标准转换,就不会在示例中应用任何标准转换。那么我提供的报价意义何在?
答案 0 :(得分:0)
你省略的其他引用可能很有启发性:
§13.3.3.1/ 1隐式转换序列是一个序列 转换用于将函数调用中的参数转换为该类型 被调用函数的相应参数。该 转换序列是子句中定义的隐式转换 4,表示它受初始化规则的约束 单个表达式(8.5,8.5.3)的对象或引用。
第4条确实谈到了这一点。
3如果和,表达式
e
可以隐式转换到类型T
只有声明T t=e
;对于一些发明的人来说,它是完美的 临时变量t
(8.5)。6任何隐式转换的效果与执行相同 相应的声明和初始化然后使用 作为转换结果的临时变量。结果是 如果
T
是左值引用类型或右值引用,则左值 函数类型(8.3.2),如果T
是对它的右值引用,则为xvalue 对象类型,否则为prvalue。表达式e
用作a glvalue当且仅当初始化将它用作glvalue时。
“完整的此类转换”(在第4条中列出)是指标准转换。请记住,它表示标准转换序列可以为空。然后§13.3.3.1.2描述了用户定义的转换序列。它包括: