有可能成功吗?
例如,请考虑以下代码段:
#include <iostream>
using namespace std;
template <typename T> class A {
public:
void print() {
T var;
cout << sizeof(var) << endl;
}
};
int main() {
A<int>* c = new A<int>;
c->print();
A<char>* d = reinterpret_cast<A<char>*>(c);
d->print();
}
这种实践是否存在“危险”?
答案 0 :(得分:3)
是的,这将调用未定义的行为。 A<char>
和A<int>
完全不相关。因此,重新解释为B
。
在实践中,它可能会起作用(至少对于这么简单的事情)。但这并不意味着你可以依赖它。
答案 1 :(得分:1)
这种实践是否存在“危险”?
这是未定义的行为,因为您正在将指针转换为其他类型然后调用函数。
请注意,A<int>
和A<char>
是不同的类型;不要混淆同名A
。
Here是Bjarne Stroustrup网页上的一篇很好的相关文章。