Что такое шаблоны выражений C ++ в простых терминах?
Шаблоны выражений - это категория метапрограммирования C ++ шаблонов, которая задерживает оценку подвыражений до тех пор, пока не станет известно полное выражение, так что могут быть применены оптимизации (особенно устранение временных).
Есть ли где-нибудь книги, в которых обсуждаются численные методы / вычисления с использованием шаблонов выражений C ++?
Я полагаю, что инопланетяне были изобретены Тоддом Велдхуйзеном, который опубликовал статью об этом 15 лет назад. (Кажется, что многие старые ссылки на него уже устарели, но в настоящее время здесь является версией этого.) Некоторые материалы об этом есть в шаблонах C ++ Дэвида Вандевурда и Николая Йосуттиса : Полное руководство .
Каким образом шаблоны выражений C ++ лучше, чем использование чистого C?
Они позволяют вам писать свой код выразительным высокоуровневым способом без потери производительности. Например,
void f(const my_array<double> a1, const my_array<double> a2)
{
my_array<double> a3 = 1.2 * a1 + a1 * a2;
// ..
}
можно оптимизировать вплоть до
for( my_array<double>::size_type idx=0; idx<a1.size(); ++idx )
a3[idx] = 1.2*a1[idx] + a1[idx]*a2[idx];
что быстрее, но сложнее понять.