Основным преимуществом TMP, когда речь идет о матричных операциях, является не возможность предварительного вычисления результата матричной операции, а скорее возможность оптимизировать сгенерированный код для выполнения фактического вычисления матрицы во время выполнения.Вы правы - очень маловероятно, что вам когда-нибудь захочется предварительно вычислить матрицу в программе, - но вполне логично хотеть оптимизировать математику во время компиляции до запуска программы.Например, рассмотрим следующий код:
Matrix a, b, c;
/* ... Initialize these matrices ... */
Matrix d = a + b + c;
В этой последней строке используются некоторые перегруженные операторы для вычисления матричного выражения.Используя традиционные методы программирования C ++, это будет работать следующим образом:
- Вычислить b * c, возвращая временный матричный объект, содержащий копию.
- Вычислить a + b + c, снова возвращаявременная копия.
- Скопируйте результат в d.
Это медленно - нет веской причины делать здесь какие-либо копии каких-либо значений.вместо этого мы должны просто за цикл по всем индексам в матрицах и суммировать все значения, которые мы находим.Однако, используя технику TMP, называемую шаблонами выражений , можно реализовать эти операторы таким способом, который фактически выполняет эти вычисления интеллектуальным, оптимизированным способом, а не медленным стандартным способом.Я полагаю, что именно об этом семействе методов упоминал Мейерс в книге.
Наиболее известные примеры TMP - это простые программы для предварительного вычисления значений во время компиляции, но на практике это гораздо более сложные методы, подобные этим.которые на самом деле привыкают на практике.