表达式模板,在《c++ template》中是为了同时支持数组操作的优雅性和高效性,并说,metaprogramming主要适用与小的大小固定的数组,而expression templates适用于中性和大型数组的运行期操作。但实际上,经过我的测试,元编程和表达式模板不像书中说的那么神奇,或许,是我没有实现好。下面,我将测试expression templates。
如果要支持如下的操作:
Array<double> x(1000), y(1000);
...
x = 1.2 * x + x * y;
数组Array必定要重载operator+ 和operator*,并返回一个临时的Array对象。上面代码有两点缺陷:
1、将会产生3个临时的数组对象,每个都是1000大小;
2、将会读6000个double变量,写4000个double变量;
从性能上来讲,如下代码具有很好的性能,但是丧失了代码的优雅性。
for ( int idx &#