java培训吧 关注:116,351贴子:396,603

C++ 的什么是 Java 不能取代的

只看楼主收藏回复

C++ 的什么是 Java 不能取代的


1楼2015-10-24 11:55回复
    Bjarne Stroustrup描述c++为"a general purpose programming language providing a direct and efficient model of hardware combined with facilities for defining lightweight abstractions"(C++ Programming Language, 4th Edition). 这个定义基本上涵盖了C++相对于其他语言最重要的两个优点。


    2楼2015-10-24 13:53
    回复

      『direct and efficient model of hardware』是指,使用C++,你所用的数据类型和在实际硬件上的执行情况一一对应。在x86架构上,当你写下int i=0,你知道编译器为你生成的源代码一定是xor eax, eax。当你声明一个对象的时候,你知道它什么时候分配,是存储在stack上还是储存在heap里,heap上的对象什么时候消失,你也知道相邻的成员一定在内存上相邻(不考虑alignment, 事实上alignment在新版本的c++中也可以直接控制,不再依赖于编译器扩展)。而在Java中,你对此没有控制,当你声明一个Integer,你不知道,也不该知道JIT编译器如何实现你的这条指令,也不会知道Integer的内存模型是什么。这使得用C++写driver和kernel成为可能,也使得C++可以充分的利用硬件性能。


      3楼2015-10-24 14:06
      回复

        『lightweight abstraction』要从两方面来看。
        『abstraction』是从和低级语言(C)比较的角度看的,很多c的idiom并不美:想想字符串处理和enum的作用域。相比之下,C++提供了非常完善的语言机制,来实现结构化、面向对象和泛型的语言模型。这种抽象使得你可以写出非常有表现力的代码,拿lambda举个例子:
        std::sort(vec.begin(), vec.end(), [](const T& t1, const T& t2) { return t1.member1 < t2.member1;});


        4楼2015-10-24 14:17
        回复

          你可以看到c++的表现力——这段代码是类型安全的,你在c当中调用qsort()需要指针转换;这段代码也是通用的——它不耦合于特定的类型(比如说Java的Collection和Array就有不同的sort方法)。而C++的表现力远不止于此,容器和智能指针的存在,使得你可以几乎消除一切恼人的内存分配、强制类型转换;RAII,使得异常安全的资源分配更加简单.


          5楼2015-10-24 14:28
          回复

            而c++的抽象,一般来说遵循『不为我没有使用到的特性付费』的原则。你使用RAII的时候,不会比手动分配资源多出任何的代价。如果你不使用Virtual Function,对象里就不会有VPTR;如果你写了一个通用的模板类sort(),你知道它所生成的代码和你手动为特定的类写的代码不会有任何不同;而在Java里你没有这样的选项:要不然你引入运行时负担(通过接口或者类型擦除和向下转换),要么你为每个特殊类型重写代码。


            6楼2015-10-24 14:36
            回复
              我尽然把下面的看完了,建议换个输入法吧
              感谢楼主,好人一生平安


              7楼2015-10-24 14:39
              回复
                自己可以多去看看自己的代码啊,怎么可以让人知道自己已经早就做完了


                8楼2015-10-24 14:42
                回复
                  请问楼猪的数据库是放在哪的?(别跟我说没有数据库)


                  9楼2015-10-24 14:45
                  回复
                    楼主,方便连个扣扣吗?一起交流交流,这个问题我也不是很会


                    来自iPhone客户端10楼2015-10-25 11:10
                    回复
                      标题就让人有点小激动,果断顶!!!


                      来自iPhone客户端11楼2015-10-25 11:16
                      回复
                        楼主真给力,瞬间形象高大了很多


                        来自iPhone客户端12楼2015-10-25 11:17
                        回复
                          看帖是一种乐趣,回复十五字是一种责任。


                          来自iPhone客户端13楼2015-10-25 11:24
                          回复
                            我们是 小白 刚学 java 什么都不懂球大师指点迷津。。。不胜感激


                            来自iPhone客户端14楼2015-10-25 11:26
                            回复
                              楼主么么哒,,,刚刚想开始学习java


                              来自iPhone客户端15楼2015-10-25 11:32
                              回复