1

作ることは可能ですか?

たとえば、次のコード スニペットを考えてみましょう。

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

この種の練習に「危険」はありますか?

4

2 に答える 2

3

はい、これは未定義の動作を引き起こします。 全く無関係なタイプですA<char>A<int>したがって、キャスティングを として再解釈するのと同じBです。

実際には、おそらくうまくいくでしょう(少なくともこれほど単純なものの場合)。しかし、それはあなたがそれに頼ることができるという意味ではありません。

于 2012-06-02T14:34:15.010 に答える
1

この種の練習に「危険」はありますか?

ポインターを別の型に変換してから関数を呼び出すため、これは未定義の動作です。とは異なるタイプであることを
覚えておいてください。同じ名前だから混乱しないでください。A<int>A<char>A

これは、Bjarne Stroustrupの Web ページからの優れた関連記事です。

于 2012-06-02T14:36:06.007 に答える