欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++四大准则|无二义、高效性、合乎日常习惯、相似相同原则

程序员文章站 2022-12-12 11:14:47
一、最高准则:无二义性对该准则的理解该准则的具体体现(1)运算符的优先级与结合性。(2)标识符不能以数字开头(3)贪心规则二、次高准则:高效性对该准则的理解该准则的具体体现(1)数组下标0索引。(2)逻辑短路逻辑短路规则为对于表达式a&&b 当a为假时,b不会计算三、第三准则:合乎日常习惯对该准则的理解该准则的具体体现四、第四准则:相似相同对该准则的理解该准则的具体体现......

一、最高准则:无二义性

对该准则的理解

无二义是每一个计算机高级语言最为重要的原则,出现二义性的语句对计算机而言就是无法理解的语句。在编程过程中某一条语句如若不能保证排除二义性,那么编译器在编译过程中将会报错,其根本目的是确保代码无二义性以保证程序的正常运行

该准则的具体体现

1)运算符的优先级与结合性:
\\\C++针对输入的语句进行处理时一定要有一个固定的处理顺序,只有这样才能保证在任何时间这条语句在C++中的意义是相同的。针对3+54这条语句,是应该先计算54再加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)某些特殊字符直接套用现实生活中的英文单词(spacename、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};

括号初始化,是变量与对象之间的“相似相同规则”
列表初始化,是变量与数组之间的“相似相同规则”

本文地址:https://blog.csdn.net/Tdmyp/article/details/108985995

相关标签: c++