C++编程语言的四种基本准则

一.最高准则:无二义性

简述:这个准则不仅仅是C++的准则,也是所有编程语言的最高准则,更是任何逻辑体系的最高准则。因为机器不像人,人的一句话在不同的语境可能还会有不同理解,但机器对一种语言的理解有且只有那么一种“理解”方式,若是一句编程语言出现两种意思,计算机无法选择,最终出现错误。

具体表现:

1.运算符的优先级与结合性

优先级与结合性本质上是为了消除二义性而设定的,如运算逻辑:

(1)运算符的优先级能消除一个算式的二义性,使其更合乎人的逻辑,如3+4*5,运算顺序是先乘后加,消除先加后乘的二义性。

示例 :

int a=3+4*5;
cout<<a<<endl;

输出结果为23,而不是35或其它。

(2)运算符的结合性是指同一优先级的运算符在表达式中的操作方向,如3-4+5,运算顺序是先减后后加,而不是先加后减;又如x=y=z,应先将z的值幅值给y,再将y的值幅值给x;

示例:

int b=3-4+5;
 cout<<b<<endl;

输出结果为4,而不是-6或其它。

2.标识符不能以数字开头

逻辑上来讲,若是标识符以数字开头,那计算机是无法判断它到底是一个数字还是一个常量,这样的话就会出现二义性。如3E4(30000),0x7C7D(16进制数)等,这些数字本身就已经有了各自所代表的含义,若用作标识符,将出错,且C++本身并不允许。

3.贪心规则

“贪心”在编程中意味着“找捷径”,也就是对于C++语言的一个逻辑算法,虽可能存在多个解决方案,但总是会优先选择“最优解”。所谓“最优解”,即在正确的前提下更加精简,且仅仅只针对被解决的这一种问题。因为是“最优解”,这样就可以有效地避免走了其它弯路而把自己“绕晕”,也就避免了其它“路径”可能产生的二义性。

二.次要准则:高效性

简述:因为C++语言出现时,计算机性能普遍较低,因此计算机性能是一个重要的制约因素,是当时情境下的“主要矛盾”。 如果有两个行为A与B,均满足无二义的规则,且A比B高效,则C++语言会选择A行为作为标准语法。

具体表现:

1.数组下标0索引

数组是一种线性表数据结构,用一组连续的内存空间,存储一组相同类型的数据。在C++中,若int a[10];此时系统会给名为a的数组一串连续的内存空间,如1000,1001,1002……1008,1009。对于索引下标,与其说是该数组中的第几个(这样似乎更符合人的习惯),不如说它是一段长度或距离,或是一个针对于首地址的“偏移量”。因为计算机不会直接确认所谓的“第几个”是指数组中的哪一个量,而是从首地址开始算起,距离首地址距离为0则为a[0],距离为1则为a[1],距离为9则为a[9]。因此用0索引更符合计算机的“习惯”,这样做也会更加高效。

2.逻辑短路

对于运算符&&和||,如A&&B,当A为false(或0)时,整个运算结果就已经为false(或0),则计算机就不会再去判断B,相当于B被“短路”了一样,这就是逻辑短路。同理,A||B,若A为true(或1)时,整个运算结果为true(或1),则计算机不会再去判断B。显然,这种处理方式更加高效。

注:并非所有语言都有对高效性的绝对准求,且高效性准则只对基础的C++语法规则有效,在STL库与模板中,已经不再是次高准则了。

三.第三准则:合乎日常习惯

简述: 程序设计语言最终是要给人使用的。若编程语言很不合乎日常习惯,将会给编程带来极大的困难。因为人的理解力和解释逻辑还是要与日常行为挂钩,程序中若引入人的这种思维模式,则会大大便捷人们的使用,使编程变得更加高效。除一些特别的像上文所说的数组0索引等外,大部分规则还是会与日常习惯相同,最简单的例子正如加减乘除的运算优先级等。

四.补充准则:相似相同规则

简述:C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a,就好像A与B互相学习,互相模仿一样。在C++中,几乎随处可见这种“相似度”很高的编写方法。
具体表现:
1. 变量的初始化

如定义变量a等于5,一般是int a=5;

但也有int a(5);(变量与对象之间的相似相同规则)

在C++11标准中,还有int a={5};有int a{5};(变量与数组的相似相同规则)

2. 数组的初始化

给定数组b[10],其初始化一般为b[10]={ };(中括号内可以不填,则默认初始为0;也可以依次填入数据,用逗号隔开)

C++11标准中,初始化可以直接b[10]{ };(数组与变量的相似相同规则)

3. 指针的初始化

这里插入图片描述

由上图可见,变量有的指针同样会有。

4. 引用初始化

所谓引用,相当于给变量改个名。如int a=5;int &b=a;

对于引用的初始化,除了有int &b=a;也有int &b(a);(引用与变量的相似相同规则)

5. 指针与数组

对数组进行元素访问时,可以是a[5]=3;用指针时,也可以是*(a+5)=3;

在函数一节中,根据相似相同规则,void f(int a[]) 可以改写为 void f(int *a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值