C和C++有太多的历史包袱而其它语言并没有这些,从另一个角度下来讲C和C++其实就是现代语言的活字典,也是现代软件设计的基础,当然有更古老的语言,但像C和C++影响力这么大的却无其它语言可以出其左右。

C++和其它语言最大的不同在于它不属于任何人,任何公司,而Java,C#,Python,Ruby等都是由某个公司或个人控制的,在相对封闭的体系之下设计的语言很容易可以做到易用性,但灵活性和设计思想的广泛度上与C++这样的语言不可同日而语。且不说其它语言从C/C++中借鉴的大量的特性,单就语言本身能够体现的设计思想广泛性上来讲只能说其它语言只作到了”溺水三千 只取一瓢”,像C++可以支持设计风格就有四种:面向过程、基于对象、面向对象、泛型。今日的C++并不是一开始就这样,最初的C++ 中连stl都没有,stl最初是HP内部开发使用的,后来才加入到标准中去,template技术也是后来加入的,反过来stl又引template的出现作了相应修改。由于C++开放的特性,在其被快速、广泛应用的同时,也出现标准落后于编译器实现的情况,因为业界的需求总是先于标准出现的,而商业化的产品必须满足这种需求。比较具体的例子如早期的VC++ ,在其MFC库中加入了很多现在看来冗余的设计比如说List这样的容器,那是不得已而为之,MFC出现的时候C++本身还不够完善,如此VC++本身就有了另一种历史负担,由于Windows平台在国内事实上的统治地位,造就了大批C++开发从VC++开始的进入这个领域的局面,而由于VC++、MFC本身的实现就不够标准,所以在入门的时候就把人引入了歧途,让学C++的根本没搞清楚到底什么是C什么是C++。大多数人从写界面开始,所以MFC的影响很不好,另一个角度来讲Windows本身所提倡的API风格,编码风格(匈牙利命名法)完全自成一体,与Unix-like这种提倡,简洁、明了的设计风格背后的设计哲学完全不同,但现代软件的历史其实是C/C++和Unix历史,所以在没有搞明白这些之前贸然进入Windows开发领域反而给更多的人造成的更多的困惑,我不是说Windows不好,而是想说不懂Linux、Unix、C/C++,那更不可能真正的搞懂Windows。因为操作系统理论上很多东西都是由unix发展过来的。简单如strcpy这样的C函数和StringCopy这样的函数名称在编码的时候有多少在会去思考它背后的东西呢?

C++样的背景正好和GNU以及互联网的发展过程相切合,从软件工程的角度来讲正如《人月神话》所说,C++实际上和Linux一样,是在一种“大集市”的模式下产生的,从而产生了类似Linux的问题,灵活、强大,但进入的门槛比较高。各种思想在C++ 中全面开花造成C++本身强大的同时复杂度也飙升。但就像Unix-like OS使用一样,他就是面向技术人员的,而且面向的是喜欢技术的人员,如果你是个比较懒的技术人员那么C/C++绝不适合你,因为它在不停的发展,也有浩瀚如海的思想和技巧在里面,不时常的琢磨是绝对用不好的。

C++中异常的处理之所以不如Java这样的语言完善,是因为操作系统的限制,真正的异常处理机制完全是由操作系统提供的,在各种平台的差异下编译器没有办法作到面面俱到,而Java之所以可以做的更好,之是因为有JVM的存在,C++编译器不能代替操作系统的工作,但JVM却可以胜任这个角色。

至于大而全的库,C++发展至念已经有很多不错的库了,比如说boost,poco,正因为很多人没搞清楚c/c++是什么,还在思想的混乱中纠结就更不可能对库有更准确的看法了。如果你真的在使用C++那么学习使用好的库如boost,那么价值远大于去学习另一门语言。

答C++复杂多余者之惑的更多相关文章

  1. Java进阶(二十)解疑答惑之何时字符串才算真正为空?

    解疑答惑之何时字符串才算真正为空? 在一次编码过程中,有一个现象一直困扰着自己,经过后台的不断调试,才发现原来有时候字符串的空非空.测试代码如下: // medname可为药品名称或药品ID Stri ...

  2. vue computed计算属性和watch监听属性解疑答惑

    computed计算属性     计算属性类似于方法,用于输出data中定义的属性数据的结果,data数据变化时,计算属性的结果会同步变化,需要注意的是计算属性不可与data定义的属性同名. 相比于方 ...

  3. OpenGL快问快答

    OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...

  4. python实用小技巧自问自答系列(一):查看类中函数文档doc的方法

    问题:如何查看某个类的方法文档说明或者是函数的参数列表情况? 答: 方法一:直接在需要查询的方法后面加上".__doc__"即可以打印出该方法的文档说明(需要先导入该方法所属模块) ...

  5. NIO的一坑一惑小记

    前言 不知不觉,已那么长时间没有更新东西了,说来真是汗颜啊.(主要是最近在技术上豁然开朗的感觉越来越少了-_-|||) 最近一直在学习Linux相关的东西.又一次接触到了I/O复用模型(select/ ...

  6. SCI答复审稿人的策略和答复信的写作技巧

    SCI论文被录用的最后一步 –---答复审稿人的策略和答复信的写作技巧 [好文转载] : 一篇稿子从酝酿到成型历经艰辛,投出去之后又是漫长的等待,好容易收到编辑的回信,得到的往往又是审稿人不留情面的一 ...

  7. STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)

    系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...

  8. [python]自问自答:python -m参数?

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  9. Android View事件机制 21问21答

    原文: http://www.cnblogs.com/punkisnotdead/p/5179115.html#3358859 1.View的坐标参数 主要有哪些?分别有什么注意的要点? 答:Left ...

随机推荐

  1. RabbitMQ在windows环境下的安装

    最近一直想入手一台电脑,作为linux服务器,由于经济状况也没有入手,现在就先介绍windows环境下安装rabbitMQ. RabbitMQ是什么 ? RabbitMQ是一个在AMQP基础上完整的, ...

  2. openvswitch以及docker网络

    修改docker0的IP,教程写的是/etc/default/docker文件,但是那是过时的配置,真正的配置是在/etc/docker/daemon.json,格式是json的: { "r ...

  3. bzoj 2655 calc——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先考虑DP.dp[ i ][ j ]表示值域为 i .选 j 个值的答案,则 dp[ ...

  4. SQL修改日期时间型数据中的年月日

    以下语句为更改 tevent表中的eventtime字段为2011-7-16当eventtime为2012-02-29时 update tevent set  eventtime='2011-7-16 ...

  5. python正则以及collections模块

    正则 一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...

  6. The connection to adb is down and a sever error has occured的解决

    1. 打开任务管理器,关掉豌豆夹等手机助手 2. 打开命令行,切换到adb所在目录,如:C:\Users\Jubincn\Downloads\adt-bundle-windows-x86_64-201 ...

  7. Samba服务学习报错总结

    1 2 3 4 5 此文献来至百度文库 http://wenku.baidu.com/link?url=hkHembjXcjoYRU9ky34a46Lzv5SAEutwa0v1_F8INQsdg_KK ...

  8. DAY16-Django之model

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. css垂直居中方法(四)

    第六种方法,使用css的writing-mode属性,结合margin:auto. 参考文章:改变CSS世界纵横规则的writing-mode属性 传统的web流中,margin设置auto值的时候, ...

  10. GET与POST方法

    HTTP中的GET,POST,PUT,DELETE对应着对这个资源的查,改,增,删4个操作.GET一般用于获取/查询资源信息,而POST一般用于更新资源信息. 1.根据HTTP规范,GET用于信息获取 ...