衡量一种语言(广义,不只限编程语言)是否复杂,咱们能够看其单词数量、词性变化以及语法结构。8数据库
根据相关数据显示,到目前最新的C++20为止,C++的关键字大约是99个,还有6个特定上下文当中有特殊含义的名字。编程
做为对比,C语言,截止到C11,关键字是44个windows
显然,C++比C复杂,其关键字比C多一倍有余。网络
但也有观点认为,C++只有在被孤立看待的时候,才会以为复杂性。数据结构
设计任何一门语言都是有背景的。编程语言
C++面向的是这样的特定用户:函数
¤ 应对各类复杂问题工具
¤ 写出运行至关长时间的解决方法性能
¤ 解决方案要知足任意的性能要求学习
¤ 工做在不一样的硬件和操做系统上
¤ 和许多已存在的系统共存
虽然人们都但愿有简单的语言,可是人们真正须要的是有助于解决问题的语言。
因为C++至关流行,所以获得结论:
人们愿意为了语言所提供的强大表现力和高效率而放弃对简单性的要求。
诸如C++中的初始化和赋值,在许多的语言中几乎都没有什么区别,好比C。
那为何在C++中却如此重要呢?
C++容许变量“拥有”必定的资源,若是值改变,就必须放弃这些资源。
当咱们在编写那些要处理分配在别处的数据结构的类时,差别就变得十分重要。
下面的代码在给s赋值时,s其实早就已经有一个值了(默认构造函数)。
在赋值的时候,s必需要放弃旧值占用的内存。
原则上,二者之间的界限没有必要划清。
能够在初始化后紧跟一个析构操做,这样会简化不少程序,可是会使某些类的抽象变得难以实现。
好比:
有一些C++的库会提供一种叫片的类,若是有某一个对象包括了某种数据结构,那咱们能够建立一个指向该数据结构某部分的片,给这个片赋值,就会影响原数据结构中被选中的那部分。
但若是赋值总等价于紧跟初始化后的析构操做,那此类的抽象就比较难实现了。
还有好比界面设计,在C++中有不少都是给类设计提供一种简化的工具,协助他们解决用户界面的问题。
因此用C++设计类比用其余语言会难更多。
但同时解决方案也更普遍。
这会给库设计者提供更策略化的可能性,使得他们能考虑更多。
经过精心设计的C++库会变得很是好用。
你们都会以为,设计一个优秀的变长字符串和负数类十分困哪,但若是把这些东西补充到编译器中,那将会是难上加难。
缘由是,用户不多有权利和能力去修改本身的编译器,把这种改变迁移到不一样的编译器上就更别提了。
基于此,C++提供了一个比较折中的方案。
它能容许咱们在无需改变编译器内部的工做模式下,就能详细地定义抽象概念的具体行为。
计算机系统复杂且具备阶段性,若是忽略了这种复杂性,不只不能消除复杂性,还要付出必定的代价。
例如计算3个浮点数相加的问题:
这段代码并不能对1020、-1020、1的全部排列提供精准的答案。
1020+1和-1020将等于1020,1最终会被彻底丢掉。
在解决这个问题时,咱们能够选择处理掉或者忽略掉复杂性。
若是决定要处理,那么就须要经过确保最精准的可能答案来完成这一点。
若是忽略复杂性,那么复杂性就会转移到其它地方。
处理复杂问题的软件是确定要面对复杂性的。
部分语言伪装复杂性不存在而选择忽略它,给用户提供了一个干净整洁的接口。
若是世界上有些地方不符合他们所设想的模型,就干脆直接忽略掉。
还有一些语言则是把复杂性直接扔给用户。(若是用户可能无论行,就赢得了博弈,这就是为何那么多不完善的软件产品在尚不完善时就交付了)。
在这里,C++则是采用折中办法,它容许咱们编写对操做环境实施最底层控制的程序,也容许咱们忽略大部分不那么重要的细节。
为了能够更加灵活,它付出的代价也更为庞大。
灵活性对于库类的设计者来讲十分宝贵,他们所以能给用户提供使用不一样的抽象级普遍应用领域的功能。
所以,从长远来看,抽象仍然是世界最有力的工具。
那对于小伙伴来讲,你以为C++是复杂仍是简单,复杂的缘由是什么呢?欢迎讨论!
最后,无论你是转行也好,初学也罢,进阶也可,若是你想学编程~
——【值得关注】个人 C/C++编程学习交流俱乐部!——
涉及:C语言、C++、windows编程、网络编程、QT图形界面开发、Linux编程、游戏编程、数据结构与算以及数据库......