强大的C++——库扩充语言
通常,一种编程语言都会有一套基础的库如影随形。语言本身负责提供运算和处理,而库(基本上)利用语言提供的机制实现一些特定的功能,如IO。但离开了基础库,语言也就顶多做个加减乘除,而且你连结果都看不到。
但是,在C++中,库不再是一个陪衬,不再仅仅提供与系统相关的操作。得益于C++强大灵活的语言机制,库甚至具备了扩展语言机制的能力。这种能力在各类语言中算是凤毛麟角的。在主流的语言中,几乎是独此一家的。(Ada也是足够强大的语言,但我不清楚是否也具备这种能力。若有高手知晓,请明示)。
在此,我举两个例子:一个是“模板表达式”,另一个是Type Traits。
模板表达式,Template Expression,是缓式评估(Lazy Evaluate)技术的一个运用。(关于缓式评估,More Effection C++有详细论述)。先看下面的代码片段:
template<typename T>
vector<T> operator+(const vector<T>& op1, const vector<T>& op2) {
…
}
template<typename T>
vector<T> operator*(const vector<T>& op1, const vector<T>& op2) {
…
}
vector<double> prise(1000), quantity1(1000), quantity2(1000), result(1000);
… //初始化v1,v2,v3
result=prise*(quantity1+quantity2);
这里我们已经为vecotr<>定义了+和*,着两个操作将两个vector的对应元素相加和相乘。这段代码似乎是在对两个仓库进行合并盘货。我们先不去管它干什么,来谈谈效率问题。