C++编程语言的四个基本准则
最高准则:无二义
对这个准则的理解:这个准则,不仅是C++的准则,更是所有类型编程语言的最高准则。同一条C++语句不能同时具备两种或多种含义,每一条C++语句只能通过一种方式执行,得到唯一结果。
准则的具体体现:
(1)运算符的优先级与结合性。
优先级是为了消除如5+6 * 7的表达式,是应该被当作(5+6) * 7还是5+(6 * 7)的二义性而设定的规则。
示例代码:
int x = 5 + 6 * 7;
(2)标识符不能以数字开头。
假设标识符不能以数字开头,例如“0123”、“0x19A”这类“标识符”就能被区分是常量还是变量。这条规则的制定很好地消除了此类二义性。
(3)贪心规则。
理解参考:
每个符号应该包含尽可能多的字符,也就是说,我们的编译器将程序分解成符号的方法是,从左到右一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,然后在判断已经读入的两个字符是否有可能是一个符号或者一个符号的组成部分,如果可能则继续读入下一个字符,然后重复整个过程,直到读入的字符组成的字符串已不再可能组成有意义的符号,这就是所谓的贪心法咯前提是符号的中间不能嵌有空格。
体现:
#include <iostream>
using namespace std;
int main(){
int a = 0, b = 0;
int c = a+++(++b);
cout << c << a << b << endl; // c = 1 a = 1 c = 1
int i = 0;
int j = i+++i+++i+i;
cout << j << i << endl; // j = 5 i = 2
return 0;
}
次高准则:高效性
对这个准则的理解:
C++语言将高效性作为次高准则,是因为C++语言出现时,计算机性能普遍较低,因此计算机性能是一个重要的制约因素,是当时情境下的“主要矛盾”。
高效性规则是为了保证程序的运行时间和储存空间尽可能节约而制定的,简化了程序的执行方式和过程,可以很好地避免时间和空间的浪费。
准则的具体体现:
(1)数组小标0索引。
对于一个存储了大量数据的数组:
如果索引从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;
如果索引从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。
在计算机中“ - ”号运算比“ + ”和“ * ”要复杂,以0索引的方式可以更高效地计算。
(2)逻辑短路。
例如当使用逻辑运算符&&时若运算符左边条件不成立,则不会对运算符右边条件进行判断,保证了程序的高效运行。
例如:
#include <iostream>
using namespace std;
int main(){
int a = 1, b = 2, c = 0;
if(a > b && c++){ //a > b为假,c++不执行
a++;
}
cout << a << b << c << endl; // a = 1 b = 2 c = 0
int i = 1, j = 2, k = 0;
if(i > j & k++){ // i > j 为假,k++执行
i++;
}
cout << i << j << k << endl; // i = 1 j = 2 k = 1
return 0;
}
第三准则:合乎日常习惯
对这个准则的理解:
一套编程规则,本身就是创建一套完整的新规则,只需要让新规则自洽即可。程序设计语言最终是给程序猿使用的。一套不合乎日常习惯的规则,会给程序猿的使用带来极大的不便性,因为日常习惯的惯性是极其强大的。这样会迫使程序员放弃该语言。
准则的具体体现:
运算优先级,数组下标,函数调用过程等等。
补充准则:相似相同规则
对这个准则的理解:
C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会为对象B额外增加一个行为a。
准则的具体体现:
以C++初始化的三种方式为例(等号初始化、列表初始化、列表初始化):
#include <iostream>
using namespace std;
int main(){
int temp = 520;
// 等号初始化
int a1 = 520;
int a2 = temp;
// 括号初始化
int b1(520);
int b2(temp);
//列表初始化
int c1{520};
int c2{temp};
cout << a1 << a2 << b1 << b2 << c1 << c2 << endl;
return 0;
}
括号初始化是变量与对象之间的“相似相同规则”;列表初始化是变量与数组之间的“相似相同规则”。本质上是C++将变量、对象及数组统一对待的原则的产物。
参考http://dreamphp.cn/blog/detail?blog_id=23612
因为这是课程作业,如果有相似之处,请谅解。