static_cast<>和不相关的类转换

时间:2014-08-20 01:44:43

标签: c++

我有以下两个班级:

 class B; 
 class A
 {
     public:
     A();
     operator B() const;
  };
  class B
  {
     public:
     B2();
  };

这里,A将隐式转换运算符定义为B类。然后C ++引用说如下:“如果存在从new_type到表达式类型的隐式转换序列,则不包括左值到右值,数组到指针,函数到指针,空指针,空成员指针,或者布尔转换,然后static_cast可以执行隐式转换的反转“。这意味着要编译以下内容

  A a;
  B b=a;
  A a1=static_cast<A> (b);

但是Xcode给出了错误消息

1 个答案:

答案 0 :(得分:5)

您的C ++参考资料不精确。 标准(C ++14§5.2.9/ 7)说,

  

任何标准转换序列(第4章)的反转,不包含左值到右值(4.1),数组到指针(4.2),函数到指针(4.3),空指针(4.10), null成员指针(4.11)或布尔值(4.12)   转换可以使用static_cast显式执行。

请注意,它表示标准转换顺序。 static_cast无法执行用户定义转换的反转。也不难看出为什么会这样;如果static_cast需要执行用户定义的转换序列的反转,则必须具有反转任意算法的能力。例如,如果A包含一对整数且B包含一个整数,并且A::operator B()将两个整数相乘,那么逆必须将整数计算为{{1} }} ...