一、最高准则:无二义性
对该准则的理解
无二义是每一个计算机高级语言最为重要的原则,出现二义性的语句对计算机而言就是无法理解的语句。在编程过程中某一条语句如若不能保证排除二义性,那么编译器在编译过程中将会报错,其根本目的是确保代码无二义性以保证程序的正常运行。
该准则的具体体现
1)运算符的优先级与结合性:
\\\C++针对输入的语句进行处理时一定要有一个固定的处理顺序,只有这样才能保证在任何时间这条语句在C++中的意义是相同的。针对3+5×4这条语句,是应该先计算5×4再加3,还是应该先计算3+5再计算×5呢,如果不规定运算符的优先级,那么结果就会产生二义性,显然是十分不合理的。
int x = 3 + 5 * 4;
cout << x << endl;
此语句的结果只可能是23
\\\运算符的结合性规定了语句读取的方向,上述例子的结合性为从左到右。当然也存在结合性为从右到左的例子,如赋值运算符、单目运算符、条件运算符。
具体运算符的优先级结合性可见网址:
https://blog.csdn.net/qq_38131333/article/details/81674642
(2)标识符不能以数字开头
double e = 3e3;
如果允许标识符以数字开头那么 3e3 既可表示标识符(变量名),亦可表示数值:3*10^3, 编译时会显示二义性。
二、次高准则:高效性
对该准则的理解
高效性意味着在相同的时间内程序运行的更快,也意味着运行相同的程序所需要的时间和空间更少。C++产生之初,计算机的工作效率并不迅速,因此需要更高效的语言提高程序的运行速度。
该准则的具体体现
(1)数组下标0索引。
是为了提高计算的效率,程序在取第i个变量的地址时,
0索引时:&a[i] = &a[0] + i * sizeof(a[0])
1索引时:&a[i] = &a[1] + (i-1)*sizeof(a[0])
很显然1索引相对于0索引程序再取第i个变量的地址时多进行了一个减法运算,而再计算机中减法运算较为耗时,所以C++采用了数组下标为0的索引来提高运行速度。
绝大多数编程语言,数组都是1索引的,如C/C++,Java,Python,C#。
但也有语言是1索引的,最典型的就是MATLAB。
(2)逻辑短路
表达式1 || 表达式2,如果表达式1为TRUE,跳过对表达式2的判断,整个表达式的运算结果为TRUE。(短路和)
表达式1 && 表达式2,如果表达式1为FALSE,跳过对表达式2的判断,整个表达式的运算结果为FALSE。(短路与)
有效的减少了运算,提高了程序运行效率。
三、第三准则:合乎日常习惯
对该准则的理解
在悠久的历史长河中,人们形成了一套符合大多数人的行为习惯和思维模式。而计算机高级语言作为一个供人类使用的语言,当然需要在必要的地方尽可能的贴合人们行为习惯与思维模式。一方面可以提高人们学习计算机语言的速度,另一方面可以减少产生由日常习惯引起的代码错误。
一套背离人们日常习惯的计算机语言,无疑会给程序员的入门与编程带来极大的不便性。
该准则的具体体现
1)代码的书写为从上至下,从左至右
2)某些特殊字符直接套用现实生活中的英文单词(namespace、endl、if、break、cout等)
2)数学逻辑运算顺序与实际匹配(乘除优先于加减)
四、第四准则:相似相同原则
对该准则的理解
现有对象A与B,A对象具有行为a,B对象具有行为b,如若行为a与行为b在形式与逻辑上有一定程度的相似性,那么在C++语言中会对A对象增加一个行为b,对B对象增加一个行为a
该准则的具体体现
初始化:
1、等号初始化:
int a = 5;
int a = i;
2、括号初始化:
int a(5);
int a(i);
3、列表初始化:
int a{ 5};
int a{ i};
int a = { 5};
int a = { i};
括号初始化,是变量与对象之间的“相似相同规则”
列表初始化,是变量与数组之间的“相似相同规则”