Предположим, что я работаю над научным кодом на C ++. В недавнем обсуждении с коллегой было высказано мнение, что шаблоны выражений могут быть очень плохой вещью, потенциально делая программное обеспечение компилируемым только на определенных версиях gcc. Предположительно, эта проблема затронула несколько научных кодов, о чем упоминалось в подзаголовках этой пародии на «Падение» . (Это единственные известные мне примеры, отсюда и ссылка.)
Однако другие люди утверждают, что шаблоны выражений полезны, потому что они могут повысить производительность, как в этой статье в SIAM Journal of Scientific Computing , избегая хранения промежуточных результатов во временных переменных.
Я не очень много знаю о метапрограммировании шаблонов в C ++, но я знаю, что это один из подходов, используемых в автоматическом дифференцировании и интервальной арифметике, и именно так я начал обсуждать шаблоны выражений. Учитывая как потенциальные преимущества в производительности, так и потенциальные недостатки в обслуживании (если это даже правильное слово), когда я должен использовать шаблоны выражений C ++ в вычислительной науке, а когда я должен их избегать?