これは遅い遅い答えですが、それでも興味深い質問です!
dom の回答は非常に正確であり、user1460044 のヒープ/スタック参照も興味深いものです。
実用的な観点からは、完全に必要な場合を除いて、(または)は使用しません。 Matx の主な利点は次のとおりです。Matx
Vec
- スタックの使用 (効率的な![1])
- 初期化。
問題は、最後にほとんどのことを行うためにMatx
データをに移動するMat
必要があるため、再びヒープに戻ることです。一方、 a の「クールな初期化」はMatx
通常の Mat で実行できます。
// Matx initialization:
Matx31f A(1.f,2.f,3.f);
// Mat initialization:
Mat B = (Mat_<float>(3,1) << 1.f, 2.f, 3.f);
また、(ヒープ/スタックを超えた) 初期化にも違いがあります。5 つの値を Matx31 に入れようとすると、クラッシュします (実行時例外)。一方、Mat_::operator<<
5 つの値で を呼び出すと、最初の 3 つだけが保存されます。
[1]要素数が 10 以下の多数の行列をプログラムで作成する必要がある場合に効率的です。その場合、Matx
行列を使用します。