代码之家  ›  专栏  ›  技术社区  ›  smerlin

为什么禁止对基地施法?

  •  3
  • smerlin  · 技术社区  · 16 年前

    读后 this question this 基本上说,从派生**到基**的强制转换是被禁止的,因为它可能会将指向Derived1对象的指针的指针更改为指向Derived2对象的指针(例如: *derived1PtrPtr=derived2Ptr ).

    好吧,我知道这是邪恶的。。。

    Derived** Base*const* 这甚至是不可能的,那么这是什么原因,这是不允许的呢?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Steve314    16 年前

    第一件事是,如果确实需要,可以将任何指针类型转换为任何其他指针类型。例如,您可以将 void* 作为中间步骤。

    第二,对于指针指向指针的情况,与其说有理由让特定案例变得困难,不如说没有特殊的规则让任何特定案例变得容易。

    基本上,你有一个指向 X -在哪里 案例得到了特殊的处理(例如派生类可以隐式地转换为基)-但是 不是其中之一。它不是基类-它是指针。没有为定义隐式类型转换 derived** ,而不是 无效* -你甚至不能隐式地 void** .

    我不认为 const

        2
  •  0
  •   Potatoswatter    16 年前

    这是不可能的 Derived** Base** 在多重继承的情况下。基可能位于对象中的任何位置,这意味着需要更改第一个指针中的值。在你的例子中,这个指针是偶数 const

    reinterpret_cast 由于内存布局保证,将定义行为。不过,一定要三思而后行。