正确(安全)使用`static_cast`

时间:2014-04-08 16:08:43

标签: c++ casting

我使用这种模式:

struct Base {
    int i;
};

struct Derived: Base {
    int j;
};

class A {
  public:
    A(Base* b): _b(b) { }
    virtual int get_int() { return _b->i; }
  protected:
    Base* const _b;
};

class B: public A {
  public:
    B(Derived* d): A(d) { }
    int get_int() { return static_cast<Derived* const>(_b)->j; }
};

static_castconst的使用看起来很安全,因为B阻止了从Base*派生的类将_b分配给dynamic_cast。我是否忽视了一些事情,即潜藏在这里是否存在未定义的行为?是否有更好或更惯用的方式来达到同样的效果?

我可以看到几个选择:

  • 使用i:没有未定义行为的可能性,但我想在没有RTTI的情况下进行编译
  • 如果其他层次结构使用jA,则BBase成员Derived和{{1}}会导致代码重复LI>

0 个答案:

没有答案