文章目录
一、最高准则:无二义性
对最高准则:无二义性的理解
无二义,是c++编程语言的最高准则,同时也是所有类型编程语言的最高准则,即同一条C++语句不能同时具备两种或多种含义,每一条C++语句只能通过一种方式执行,得到唯一结果。数学中也经常用到这个原则。为了消除二义,人们会认为的规定一些准则或者将某些有二义的行为定位非法。比如运算符的优先级与结合性,先乘除后加减等。再如变量名不能以数字开头,也是为了消除二义性而设置的。
准则的具体体现
(1)运算符的优先级与结合性
优先级是为了消除诸如3+4*5是应被当做(3+4)*5还是3+(4 * 5)的二义性而制定的规则。
示例代码:
int x = 3 + 4 * 5;
cout << x << endl;
结合性是为了消除诸如x=y=z是应先执行y=z还是x=y的二义性而制定的规则。
示例代码:
int x=1, y=2, z=3;
x=y=z;
cout << a << b << endl;
(2)标识符不能以数字开头
标识符不以数字开头的原因是:数字是一种常量,而标识符在语句中一般作为变量存在,如果存在数字开头,计算机会难以辨别是常量还是变量,无法正确区分是否建立对应的存储空间,同理,对编程者而言,程序也会变得难以看懂。
(3)贪心规则
贪心规则是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。由于算法得到的是问题的最优解,故可以消除存在其它非最优解的二义性。
二、次高准则:高效性
对次高准则:高效性的理解
由于c++出现时,计算机的效率较低,因此需要提高语言的效率,将高效性作为c++语言的次高准则。但是随着计算机的发展,性能也越来越高,高效性的地位有所降低。高效性的具体体现:比如,数组下标选择0索引而不是1索引,这样就会减少很多减法的计算。再如,c++引入了指针、内联函数、引用,这些使得c++更加高效。
准则的具体体现
(1)数组下标0索引
数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。 如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度; 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。 显然以0索引的方式可以更高效地计算。
(2)逻辑短路
例如当使用逻辑运算符&&时若运算符左边条件不成立,则不会对运算符右边条件进行判断,保证了程序的高效运行。
示例代码:
int a=1,b=2,c=3;
if(a>b&&b++)
a++;
由于a>b不成立,故运算符&&右边b++不会执行,b仍为2。
三、第三准则:合乎日常习惯
对第三准则:合乎日常习惯的理解
这一准则是因为编程语言最终是为程序员所用的,因此符合程序员的习惯使得编程更加高效准确。
准则的具体体现
(1)运算的优先级
在数学中,乘法的优先级高于加法,先计算乘法再计算加法,在C++中也是如此,符合日常习惯,给编写带来了极大方便。
示例代码:
int x=3+4*5
(2)二维数组下标表示总行数和总列数
例如a[3][4]用下标3和4表示一个3行4列的矩阵,合乎日常习惯。
四、补充准则:相似相同规则
对补充准则:相似相同规则的理解
指的是在c++中,如果有两个不同的对象A与B,A有行为a,B有行为b。如果a与b两种行为在逻辑上具有相似性,则c++会为A额外增加一个b,同理,B也将增加一个行为a。
准则的具体体现
C++的三类初始化方式:等号初始化、括号初始化、列表初始化。
等号初始化:
int k=5;
int k=i;
括号初始化:
int k(5);
int k(i);
列表初始化:
int j{i};
int j{5};
int j={i};
int j={5}
括号初始化是变量与对象之间的“相似相同规则”;列表初始化是变量与数组之间的“相似相同规则”。本质上是C++将变量、对象及数组统一对待的原则的产物。
五、参考链接
C++编程语言的四个基本准则
https://blog.csdn.net/m0_50767528/article/details/108921077
C++编程语言的四个基本准则
https://blog.csdn.net/m0_50765373/article/details/108916778
C++编程语言的四个基本准则
https://blog.csdn.net/NlDH0GG/article/details/108940285