在讲解C++中的C++语法之前,先让大家理解下C与C++之间的区别,C和C++ C++源于C。 C:面向结构的程序设计语言。 C++:面向对象的程序设计语言。 C++继承C语言的优点,同时增加面向对象特性。
C++程序的组成
(1)预处理命令
以#开头。三类预处理命令。
A 宏定义命令。
B 文件包含命令。
C 条件编译命令。
(2)语句
(3)输入和输出
(4)变量
(5)函数
语言符号
在C++语法中,编译器识别的基本元素是“语言符号”,一个语言符号是编译器不能分成组成成分元素的源程序文本。
语言符号包括:关键词、标识符、常量、字符串文字、运算符、标点字符。
空白字符
空格、制表、换行、回车、换页、纵向制表 (vertical tab)和换行(newline)字符都称为空白字符(white-space),因为它们具有相同的功能。即作为打印页上单词和行之间的空白,使其更容易阅读。通过空白字符和其它语言符号,例如运算符和标点,从而对语言符号进行定界。
当对代码进行词法分析时,C++编译器忽略空白字符,除非使用它们作为分隔符或者字符常量或字符串文字的组成成分。使用空白字符使程序更具可读性。 注意编译器也把注释作为空白字符处理。
首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。
当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。
那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。 底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。
即便是C++语法的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。
值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++语法并为之找一堆理由。
我假定你不是这样的人。不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。
【编辑推荐】