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=間にオーバーロードはありませんが、次のオーバーロードがありますCudaMatrixMatrixoperator=
const CudaMatrix& operator=(const CudaMatrix<LibraryNameSpace::int2_>&);
2つの間CudaMatrix。何が起こるかは次のとおりです。
- この 2 つは、と
typeidの正しいクラスを返します。foo1foo2 - 上記のオーバーロードは、割り当て
operator=のために実行時にコンパイルされ、呼び出されます。foo2=foo1それどころか、コンパイル エラーが発生すると予想していました。 - 割り当ての結果は、!の正しい結果につながります。
foo2
Visual Studio 2010 を使用し、リリース モードでコンパイルしています。
この明らかに非論理的な動作が発生する理由について、誰かがいくつかのヒントを持っていますか?
ありがとう。