首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【转】细数那些令人发疯的程序语言的特性

2012-09-19 
【转】细数那些令人发狂的程序语言的特性1、C语言中的数组在C/C++中,a[10] 可以写成 10[a]“Hello World”[i]

【转】细数那些令人发狂的程序语言的特性
1、C语言中的数组
在C/C++中,a[10] 可以写成 10[a]

“Hello World”[i] 也可以写成 i["Hello World"]

2、在Javascript中
'5' + 3 的结果是:'53'

'5' – 3 的结果是:2   

3、C/C++中的Trigraphs

int main() {       cout << "LOL??!";   }  int main() {    cout << "LOL??!";}
上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 | ,关于Trigraphs,下面有个表格: 

'' == '0' //false 0 == '' //true 0 == '0' //true false == 'false' //false false == '0' //true false == undefined //false false == null //false null == undefined //true " \t\r\n" == 0 //true '' == '0' //false0 == '' //true0 == '0' //truefalse == 'false' //falsefalse == '0' //truefalse == undefined //falsefalse == null //falsenull == undefined //true" \t\r\n" == 0 //true

5、Java的Integer cache
Integer foo = 1000;   Integer bar = 1000;     foo <= bar; // true   foo >= bar; // true   foo == bar; // false     //然后,如果你的 foo 和 bar 的值在 127 和 -128 之间(包括)   //那么,其行为则改变了:     Integer foo = 42;   Integer bar = 42;     foo <= bar; // true   foo >= bar; // true   foo == bar; // true  Integer foo = 1000;Integer bar = 1000;foo <= bar; // truefoo >= bar; // truefoo == bar; // false//然后,如果你的 foo 和 bar 的值在 127 和 -128 之间(包括)//那么,其行为则改变了:Integer foo = 42;Integer bar = 42;foo <= bar; // truefoo >= bar; // truefoo == bar; // true

为什么会这样呢?你需要了解一下Java Interger Cache,下面是相关的程序,注意其中的注释
/**     * Returns a <tt>Integer</tt> instance representing the specified     * <tt>int</tt> value.     * If a new <tt>Integer</tt> instance is not required, this method     * should generally be used in preference to the constructor     * <a href="mailto:{@link">{@link</a> #Integer(int)}, as this method is likely to yield     * significantly better space and time performance by caching     * frequently requested values.     *     * @param  i an <code>int</code> value.     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.     * @since  1.5     */    public static Integer valueOf(int i) {        if(i >= -128 && i <= IntegerCache.high)            return IntegerCache.cache[i + 128];        else            return new Integer(i);    }

5、Perl的那些奇怪的变量
$.   $_  $_#   $$   $[   @_ 

其所有的这些怪异的变量请参看:http://www.kichwa.com/quik_ref/spec_variables.html

6、Java的异常返回
请看下面这段程序,你觉得其返回true还是false? 
try {       return true;   } finally {       return false;   }  try {    return true;} finally {    return false;}
在 javascript 和python下,其行为和Java的是一样的。 

7、C语言中的Duff device
下面的这段程序你能看得懂吗?这就是所谓的Duff Device,相当的怪异。
void duff_memcpy( char* to, char* from, size_t count ) {       size_t n = (count+7)/8;       switch( count%8 ) {       case 0: do{ *to++ = *from++;       case 7:     *to++ = *from++;       case 6:     *to++ = *from++;       case 5:     *to++ = *from++;       case 4:     *to++ = *from++;       case 3:     *to++ = *from++;       case 2:     *to++ = *from++;       case 1:     *to++ = *from++;               }while(--n>0);       }   }   void duff_memcpy( char* to, char* from, size_t count ) {    size_t n = (count+7)/8;    switch( count%8 ) {    case 0: do{ *to++ = *from++;    case 7:     *to++ = *from++;    case 6:     *to++ = *from++;    case 5:     *to++ = *from++;    case 4:     *to++ = *from++;    case 3:     *to++ = *from++;    case 2:     *to++ = *from++;    case 1:     *to++ = *from++;            }while(--n>0);    }} 

8、PHP中的字符串当函数用
PHP中的某些用法也是很怪异的
$x = "foo";   function foo(){ echo "wtf"; }   $x();  $x = "foo";function foo(){ echo "wtf"; }$x();

9、在C++中,你可以使用空指针调用静态函数
class Foo {     public:       static void bar() {         std::cout << "bar()" << std::endl;       }   };  class Foo {  public:    static void bar() {      std::cout << "bar()" << std::endl;    }};

热点排行