【发布时间】:2012-01-31 18:23:01
【问题描述】:
我正在阅读 Effective C++ 并遇到了这个例子:
class Window { // base class
public:
virtual void onResize() { ... } // base onResize impl
...
};
class SpecialWindow: public Window { // derived class
public:
virtual void onResize() { // derived onResize impl;
static_cast<Window>(*this).onResize(); // cast *this to Window,
// then call its onResize;
// this doesn't work!
... // do SpecialWindow-
} // specific stuff
...
};
书上说:
你可能没想到的是它不会在当前对象上调用那个函数!相反,强制转换为 *this 的基类部分创建一个新的临时副本,然后在副本上调用 onResize!
为什么 static_cast(上面的代码)会创建一个新副本?为什么不直接使用对象的基类部分?
【问题讨论】:
-
如果它被转换为
static_cast<Window&>(*this).onResize();,那么我认为它会使用当前对象。 (注意&)。不过不确定。 -
static_cast
(this)->onResize();也应该工作,但当然 Window::onResize();这里是正确的。
标签: c++ casting effective-c++