static_cast <>和无关的类概念

olz*_*ala 1 c++

我有以下两个班级:

 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给出了错误信息

Bri*_*ian 5

你的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...