有可能做到吗?

例如,考虑以下代码片段:

#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();
}

这种做法有没有“危险”?

最佳答案

是的,这将导致未定义的行为。 A<char>A<int>是完全不相关的类型。因此,将广播重新解释为B没什么不同。

实际上,它可能会起作用(至少对于这种简单的事情而言)。但这并不意味着您可以依靠它。

10-07 19:06
查看更多