【发布时间】:2014-01-15 05:37:53
【问题描述】:
我有一个 A 类对象,我想在自定义堆栈对象上分配它。为此,我只需将堆栈指针移动与对象大小一样多的字节并返回其先前的值:
class A : public B {}; //B is from a precompiled library
class stack {
public:
stack(void): _top(&_storage[0]) {}
template <typename T>
inline T* push(void) {
T* ptr = static_cast<T*>(_top);
_top += sizeof(T);
return ptr;
}
//...
private:
char _storage[1024];
char* _top;
};
stack _stack;
int main(int argc, char** argv) {
A* a = _stack.push<A>(); //ignore the lack of a constructor call
return 0;
}
Visual C++ 只是告诉我 static_cast 不能从 char* 转换为 A*。常规的 C 风格转换不会给我这个错误,但我宁愿更明确并避免动态转换(A 从另一个类继承,但对它没有的 vtable 没有贡献)。在这种情况下,两者有什么区别吗?
【问题讨论】:
标签: c++ visual-c++ c++11 static-cast