C++编程语言的四个基本准则及其具体体现
一、最高准则:无二义性
-
理解:对于C/C++,同一条语句只能表达一种含义,不能有所歧义,即:只能通过一种方式执行,只能有一种结果。
-
准则的具体体现 :
(1)运算符的优先级与结合性。
优先级:先乘除后加减、有括号先算括号内的。
结合性:若一个运算对象两侧的运算符优先级相同,按规定的结合方向:算术运算符——自左向右,赋值运算符——自右向左。
(2)标识符不能以数字开头
为了让标识符只能是标识符,例如:假若没有这条规则,那么“246”是标识符还是常量?就不好区分了,这条规则的制定很好地消除了此类二义性。
(3)贪心规则
每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果字条可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字条,重复上述判断,直到读入的字符组成的字符串已经不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等)。这种策略得到的是最优解,故而可以消除其他解的二义性。
二、次高准则:高效性
-
理解:高效性准则只对基础的C++语法规则有效,在STL库与模板中,已经不再是次高准则了。该准则是在C++语言刚出现时计算机性能普遍较低的背景下为了提高程序执行效率而制定的。从而体现高效二字。
-
准则的具体体现:
(1)数组下标0索引:
提高计算的效率,程序在取第i个变量的地址时
0索引时:&a[i] = &a[0] + i * sizeof(a[0])
1索引时:&a[i] = &a[1] + (i-1)*sizeof(a[0])
0索引时计算步骤少一步,效率更高一点。
(2)逻辑运算:
在逻辑表达式的求解中,不是所有的逻辑运算符都要被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例如:a||b||c,只要a为真就不必判断b、c。
三、第三准则:合乎日常习惯
-
理解:就是让C++编程语言对程序员来说用的顺手,符合日常用语习惯。
-
准则的具体体现:
(1)语句的命名:循环语句、结构体等等采用英语单词,便于理解。
例如:while、do·····while
(2)运算时的优先级:先乘除后加减、有括号的先算括号里的等等。
四、补充准则:相似相同规则
-
理解:也就是,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。
-
准则的具体体现:
C++变量的初始化:
传统初始化:
等号初始化:使用同类型的常量来初始化 int k = 5; int k = i;
括号初始化:C++特有的初始化形式 int k(5); int k(i); 变量与对象之间的“相似相同规则”C++11标准:
列表初始化: int j{i}; int j{5};int j={i}; int j={5};变量与数组之间的“相似相同规则”