博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
细数那些令人发狂的程序语言的特性
阅读量:4109 次
发布时间:2019-05-25

本文共 2541 字,大约阅读时间需要 8 分钟。

这些最为奇怪的程序语言的特性,来自stackoverflow.com,原贴在。我摘选了一些例子,的确是比较怪异,让我们一个一个来看看。

1、C语言中的数组

在C/C++中,a[10] 可以写成 10[a]

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

2、在Javascript中 

 ’5′ + 3 的结果是:’53′

 ’5′ – 3 的结果是:2              javascript点击

3、C/C++中的Trigraphs 

int main() {    cout << "LOL??!";}

 上面的这段程序会输出: “LOL|”,这是因为 ??! 被转成了 | ,关于Trigraphs,下面有个表格: 

??= #
??( [
??/ \
??) ]
??’ ^
??< {
??! |
??> }
??- ~

4、JavaScript 的条件表 

看到下面这个表,不难理解为什么Javascript程序员为什么痛苦了

''        ==   '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; // 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 Integer instance representing the specified     * int value.     * If a new Integer instance is not required, this method     * should generally be used in preference to the constructor     * {@link #Integer(int)}, as this method is likely to yield     * significantly better space and time performance by caching     * frequently requested values.     *     * @param  i an int value.     * @return a Integer instance representing i.     * @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的那些奇怪的变量

$.$_$_#$$$[@_

 其所有的这些怪异的变量请参看:

 

6、Java的异常返回

请看下面这段程序,你觉得其返回true还是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);    }}

8、PHP中的字符串当函数用

PHP中的某些用法也是很怪异的

$x = "foo";function foo(){ echo "wtf"; }$x();

9、在C++中,你可以使用空指针调用静态函数

class Foo {  public:    static void bar() {      std::cout << "bar()" << std::endl;    }};

呵呵。的确是挺怪异的。

转载地址:http://mlasi.baihongyu.com/

你可能感兴趣的文章
“Maven官方用户入门指南”翻译之四
查看>>
“Maven官方用户入门指南”翻译之五
查看>>
“Maven官方用户入门指南”翻译之六
查看>>
“Maven官方用户入门指南”翻译之七
查看>>
Maven官方用户入门指南”翻译之八(完)
查看>>
Hadoop之MultipleOutputs
查看>>
hadoopJob执行shell脚本
查看>>
hadoop集群直接数据拷贝
查看>>
java读取jar中的资源文件
查看>>
生成shell脚本删除hadoop中所有Pending的Job
查看>>
[综合]Apache Hadoop 2.2.0概要[翻译]
查看>>
[综合]Apache Hadoop 2.2.0单节点集群安装[翻译]
查看>>
[综合]Apache Hadoop 2.2.0集群安装(1)[翻译]
查看>>
[综合]Apache Hadoop 2.2.0集群安装(2)[翻译]
查看>>
Hadoop对输入路径的过滤问题解决方式
查看>>
[综合]Apache Hadoop 2.2.0命令行参考手册[翻译]
查看>>
shell后台程序运行方式概述
查看>>
[综合]Apache Hadoop 2.2.0文件系统shell(一)[翻译]
查看>>
[综合]Apache Hadoop 2.2.0文件系统shell(二)[翻译]
查看>>
[MapReduce]Apache Hadoop 2.2.0MapReduce1.x向2.x迁移[翻译]
查看>>