Я в настоящее время использую C для числовых вычислений. Я услышал, что использование Шаблонов Выражения C++ лучше для научных вычислений. Что такое Шаблоны Выражения C++ простыми словами?
Есть ли книги вокруг этого, обсуждают числовые методы/вычисления с помощью Шаблонов Выражения C++?
Каким образом, Шаблоны Выражения C++ лучше, чем использование чистого C?
Простыми словами, что такое шаблоны выражений C ++?
Шаблоны выражений - это категория метапрограммирования шаблонов C ++, которая откладывает оценку подвыражений до тех пор, пока не станет известно полное выражение, чтобы можно было применить оптимизацию (особенно устранение временных ограничений).
Существуют ли книги, в которых обсуждаются численные методы / вычисления с использованием шаблонов выражений C ++?
Я считаю, что инопланетяне были изобретены Тоддом Велдхуизеном, который опубликовал статью об этом 15 лет назад. (Похоже, что многие старые ссылки на него уже мертвы, но в настоящее время здесь является его версией.) Некоторые материалы об этом есть в C ++ Templates: The Complete Путеводитель .
Чем шаблоны выражений 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];
, что быстрее, но труднее для понимания.
В старом добром архиве Flipcode есть хорошая статья по математике шаблонов C ++ (несомненно, возвращает воспоминания):
http: // www.flipcode.com/archives/Faster_Vector_Math_Using_Templates.shtml
Добавляя к ответу sbi, шаблоны выражений реализуют высокоуровневую оптимизацию глазка с использованием шаблонов для сопоставления и синтеза с образцом.
Они также добавляют синтаксический сахар или делают ваш код более читабельным, позволяя вам определять алгоритм в терминах простых операций. Итак, в данном случае простота и элегантность достигаются за счет оптимизации с помощью метапрограммирования. По крайней мере, если все делать правильно.