我有以下两个班级:
class B;
class A
{
public:
A();
operator B() const;
};
class B
{
public:
B2();
};
Run Code Online (Sandbox Code Playgroud)
这里,A将隐式转换运算符定义为B类.然后C++引用说如下:"如果存在从new_type到表达式类型的隐式转换序列,则不包括左值到右值,数组到指针,函数到指针,空指针,空成员指针,或者布尔转换,然后static_cast可以执行隐式转换的反转".这意味着要编译以下内容
A a;
B b=a;
A a1=static_cast<A> (b);
Run Code Online (Sandbox Code Playgroud)
但Xcode给出了错误信息
你的C++参考是不精确的.的标准(C++ 14§5.2.9/ 7)表示,
任何标准转换序列(第4章)的反转,不包含左值到右值(4.1),数组到指针(4.2),函数到指针(4.3),空指针(4.10),空成员指针(4.11)或布尔(4.12)转换可以使用明确执行
static_cast.
请注意,它表示标准转换顺序.static_cast无法执行用户定义转换的反转.也不难看出为什么会这样; 如果static_cast需要执行用户定义的转换序列的反转,则必须具有反转任意算法的能力.例如,如果A持有一对整数并B保持一个整数,并将A::operator B()两个整数相乘,那么逆必须将整数计算在B...