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. axios 请求报错

    报错如下: 解决:axios的请求配置中的baseURL配置错误,修改好即可. 报错前: baseURL: "192.168.30.220:3000", 解决后:baseURL: ...

  2. Linux 命令行监视显卡使用情况

    本文由Suzzz原创,发布于 http://www.cnblogs.com/Suzzz/p/4106581.html ,转载请保留此声明. 在使用GPU做计算,比如跑 Deep Learning代码的 ...

  3. [Angularjs-学习笔记]工具篇

    因为一开始学习前端知识一直都是在慕课网,所以这次准备学习下angularjs等了好久,终于慕课网出了angularjs的内容,于是准备开始跟着老师的步骤进行学习. 大漠老师关于开发工具的内容讲得比较快 ...

  4. PostgreSQL 备份和恢复

    备份和恢复有三种不同的基本方法来备份PostgreSQL数据SQL转储文件系统级备份File system level backup连续归档 1. SQL转储 pg_dump dbname > ...

  5. Excel开发学习笔记:新建文档级的excel解决方案

    工作中遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,最近终于完成了雏形.抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多 ...

  6. SQL属性第一个值不被选中,属性默认第一个值

    把 Please Choose Color 属性名设置为不可选的 UPDATE `products_attributes` SET `attributes_display_only` = '1' WH ...

  7. 【转】ruby中nil?, empty? and blank?的选择

    In Ruby, you check with nil? if an object is nil:article = nil article.nil? # => true empty? chec ...

  8. 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

    上篇博文我们介绍了mybatis的基本概念与原理,这篇博文我们通过Spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2. ...

  9. 部署和调优 1.5 vsftp部署和优化-1

    系统自带的ftp服务软件.vsftpd 安装vsftpd yum install -y vsftpd 启动vsftpd /etc/init.d/vsftpd start 如果启动失败,可能是端口被占用 ...

  10. mybatis(非常详细的哦~~~~)

    备注:ibatis 迁入google code 更名为Mybatis 官方文档:http://mybatis.org/mybatis-3/ 比较好的教程推荐:http://www.blogjava.n ...