CPU 用と GPU 用の 2 つの行列クラスがあります。たとえばMatrix
、CudaMatrix
それぞれ と です。宣言と定義は、ファイル.h
、.cpp
、.cuh
およびにあり.cu
ます。でmain
、私は持っています
Matrix<int2_> foo1(1,2);
// Definition of the elements of foo1...
CudaMatrix<int2_> foo2(1,2);
cout << typeid(foo1).name() << "\n";
cout << typeid(foo2).name() << "\n";
// Equality
foo2=foo1;
今、 aと a のoperator=
間にオーバーロードはありませんが、次のオーバーロードがありますCudaMatrix
Matrix
operator=
const CudaMatrix& operator=(const CudaMatrix<LibraryNameSpace::int2_>&);
2つの間CudaMatrix
。何が起こるかは次のとおりです。
- この 2 つは、と
typeid
の正しいクラスを返します。foo1
foo2
- 上記のオーバーロードは、割り当て
operator=
のために実行時にコンパイルされ、呼び出されます。foo2=foo1
それどころか、コンパイル エラーが発生すると予想していました。 - 割り当ての結果は、!の正しい結果につながります。
foo2
Visual Studio 2010 を使用し、リリース モードでコンパイルしています。
この明らかに非論理的な動作が発生する理由について、誰かがいくつかのヒントを持っていますか?
ありがとう。