static_cast<>和不相关的类

static_cast<> and unrelated class concersion

本文关键字:不相关 gt lt static cast      更新时间:2023-10-16

我有以下 2 个类:

 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 给出了一条错误消息

您的C++引用不精确。标准(C++14 §5.2.9/7(说:

不包含左值到右值 (4.1(、数组到指针 (4.2(、函数到指针 (4.3(、空指针 (

4.10(、空成员指针 (4.11( 或布尔值 (4.12( 的任何标准转换序列(子句 4(的逆函数 转换,可以使用static_cast显式执行。

请注意,它显示标准转换顺序。 static_cast无法执行用户定义转换的反向操作。也不难看出为什么会这样;如果需要static_cast执行用户定义的转换序列的逆运算,则必须能够反转任意算法。例如,如果A持有一对整数,B持有单个整数,并且A::operator B()将两个整数相乘,则逆值必须以B为单位分解整数......

相关文章: