Какова цель cv ::MatExpr?

#opencv

#opencv

Вопрос:

Арифметические операции OpenCV приводят cv::MatExpr к, например:

MatExpr operator (const Mat amp; a, const Mat amp;b);

Я вижу, что это используется для представления выражения до его вычисления. Какова цель этого?

Комментарии:

1. en.wikipedia.org/wiki/Expression_templates

2. @Miki Это, кажется, отличается, потому cv::MatExpr что не шаблонно.

3. docs.opencv.org/2.4/modules/core/doc/…

Ответ №1:

Допустим, у вас есть это выражение:
Mat A = 3 B * 5;
где B также a Mat . Если операторы и * где возвращать a Mat , B * 5 должны были бы создать временный Mat , а затем оператор должен был бы создать другой Mat . Вместо B * 5 этого возвращает a MatExpr , который на самом деле не создает a Mat , он просто «запоминает» операцию, которую ему нужно выполнить. Затем оператор создает другой MatExpr , и только = оператор создает a Mat , что позволяет избежать временного Mat .
Смотрите https://en.wikipedia.org/wiki/Lazy_evaluation