2008-11-18

Lazy evaluation

对于C/C++,if语句的表达式如果使用&&,则计算到某个条件为false后,后面就不会执行。
因此,经常有人写if((pTemp != NULL) && (pTemp->iValue > 10))类似的语句。(注:实际上这种写法不严谨。)

对于Java,if语句中表达式结果只能是Boolean。但是,可以使用&&和&。
如果使用&&,则与C/C++一样,Lazy evaluation。
如果使用&,则即使某个条件为false之后还会计算所有的条件。(可以理解为Boolean的位与)

Javascript const

因为Javascript不支持宏定义,所以就把一些常量从var修改为const。
用FF测试OK,用IE报错——居然到IE7还不支持const(const是Javascipt 1.4之后增加的)。

2008-11-17

1,swap
方法1: #define SWAP(a, b) a ^= b; b ^= a; a ^= b;
方法2:#define swap(x, y) (x = x + y;y = x - y;x = x - y);
(错误: #define swap(x,y) temp=y;y=x;x=temp; 因为temp没有定义)
评:方法2对浮点数也适用。
注:这里可以不用括号,因为只能交换两个变量。

2,min
如果写成 #define MIN(A,B) (A <= B ? A : B) ,那么有问题——试想下面这行代码:
least = MIN(*p++, b);
所以,需要写成 #define MIN(A,B) ((A) <= (B) ? (A) : (B))