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

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

## 一、最高准则:无二义性。

对这个准则的理解:同一条语句不能包含两重或多重含义,计算机只能执行一个含义,如果语句有歧义会导致计算机错误,执行不了。
准则的具体体现:
(1)运算符的优先级与结合性。
优先级是为了消除诸如3+45是应被当做(3+4)5还是3+(4 * 5)的二义性而制定的规则。
示例代码:
int x=3+4
5
结合性是为了消除诸如x=y=z是应先执行y=z还是x=y的二义性而制定的规则。
示例代码:
int x,y=1,z=2;
x=y=z;
(2)标识符不能以数字开头。
示例代码:
double e = 3e3;
如果标识符允许第一个字符为数字字符的话,那么 3e3 既可表示标识符(变量名),也可以可表示数值:3
10^3, 编译时会显示二义性。如果一个变量以数字开头,那么分析器就必须在遇到第一个或第二个英文字符的时候回溯来确定是否是数字、变量名还是词法错误,所以默认标识符不能以数字开头。
(3)贪心规则。
每一个符号应该包含尽可能多的字符.也就是说,编译器将程序分解成符号的方法是:从左到右一个一个字符地读入,如果此字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两上字符组成的字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号,算法得到的是局部最优解,就可以消除其他非最优解的二义性。
二、次高准则:高效性
***对这个准则的理解:C++编程语言出现时,计算机性能普遍较低,所以计算机性能是个重要的制约因素,也是主要矛盾,随着计算机逐渐发展,性能逐渐提高,高效性就不再是很多语言的次高准则了。如果有两个行为A与B,均满足无二义的规则,且A比B高效,则C++语言会选择A行为作为标准语法。
准则的具体体现:
(1)数组下标0索引
从数组中存储的数据模型来看,下标最精确的意思是”偏移量“,a[0]的偏移量是0,即为首地址。a[i]的偏移量是i,寻址公式就是a[i]_address = base_address + i
data_type_size。如果下标从1开始,那对应的寻址公式a[i]_address = base_address + (i-1)*data_type_size
对CPU来说,每次随机访问,就多了一次运算,多发一条指令,白白浪费了第一次的地址,所以数组下标0索引。
(2)逻辑短路。
例如当使用逻辑运算符&&时若运算符左边条件不成立,则不会对运算符右边条件进行判断,保证了程序的高效运行。
示例代码:
int a=1,b=2,c=3;
if(a>b&&b++)
a++;
由于a>b不成立,故运算符&&右边b++不会执行,b仍为2。
三、第三准则:合乎日常习惯
对这个准则的理解:一套编程规则,本身就是创建一套完整的新规则,只需要让新规则自洽即可。如数学史上的双曲几何与椭圆几何。因为,程序设计语言最终是给程序员使用的。一套不合乎日常习惯的规则,会给程序员的使用带来极大的不便性,因为日常习惯的惯性是极其强大的。这样会迫使程序员放弃该语言。
准则的具体体现
(1)内置函数命名
嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 作用是提高程序的执行效率,大多编程语言都有自己的内置函数,在C++中的内置函数有数学函数、随机函数等。 内置函数的存在极大的提升了程序员的效率和程序的阅读,这也遵循了第二准则高效性。对于内置函数的命名往往是以这个函数的作用的英文命名的,符合日常习惯,在调用时也比较方便。
(2)语序
现代人们的阅读习惯往往是从左至右,从上往下阅读。不仅是C++,几乎所有编程语言的运行顺序都是由左到右,由上到下。为了不遗漏信息,一行一行运行,由左向右一个符号一个符号运行,比喻成人认真读书,索取所有信息的情况。
不过在日常习惯的第三准则之前同样也有遵循前两个准则,例如标识符的结合性、逻辑短路等顺序有微弱不同,从某种意义上也是符合日常习惯的语序的。偶尔不符合日常习惯的规则往往是于其他两个准则更为必要的情况,程序员接触规则久了就习惯了。
四、补充规则:相似相同规则
对这个准则的理解:C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。如中国人吃饭用筷子,外国人吃饭用叉子,他们交流一番后,外国人学会了用筷子,中国人学会了用叉子,然后人类的吃饭方式就统一为筷子与叉子的集合。
准则的具体体现:
(1)变量初始化
C++11对于C++变量的初始化,可以分为三类如下:
1.等号初始化:int k = i;int k = 5
2.括号初始化:int k(5);int k(i)
3.列表初始化:int j{i};int j{5}; int j={i};int j={5};
括号初始化,是变量与对象之间的“相似相同规则”;列表初始化,是变量与数组之间的“相似相同规则”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值