C++四项基本准则

1.最高准则:无二义性
理解:这个规则不仅是C++语言中最高准则,更是任何逻辑体系的最高准则。同一条语句不能同时具备两种或多种含义,每一条语句在限定区域内只能通过一种方式执行,得到唯一结果。因为机器无法具有人类的思维,根据上下文进行理解,因而在存在二义的情况下机器无法选择或者无法精确选择编程者的目标。
具体体现:
(1)运算符的优先级与结合性:
运算符的优先级能消除一个算式的二义性,使其更合乎人的逻辑,如3+4*5,运算顺序是先乘后加,消除先加后乘的二义性。否则可能出现先运算3+4再运算积的歧义。同时,结合性则是消除同一优先级的不同的运算符的运算顺序。
(2)运算符不能以数字开头
逻辑上来讲,若是标识符以数字开头,那计算机是无法判断它到底是一个数字还是一个常量,此时会出现二义性。如3E4,123等这些数字本身就已经有了各自所代表的含义,若用作标识符,将出现二义而产生混乱。
(3)贪心规则:
贪心规则是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,而是使算法得到的是在某种意义上的局部最优解。也就避免选择其他路径产生的二义性。
(4)名称空间支持
在编写大型程序以及将现有代码组合为程序时,通常会存在两组代码中包含具有相同名的函数,而在使用该函数时,编译器不知道所指具体为哪一个,因而名称空间的支持能够使得编译器分辨函数所指。

2.次高准则:高效性
C++语言将高效性作为次高准则,是因为C++语言出现时,计算机性能普遍较低,因此计算机性能是一个重要的制约因素,为了运算效率而设计。如果有两个行为A与B,均满足无二义的规则,且A比B高效,则C++语言会选择A行为作为标准语法。当然在计算机技术取得大进步的现在,高效性已不再那么重要,也给予编程者更高的自由度。
具体体现:
(1)数组下标0索引:
数组用一组连续的内存空间,存储一组相同类型的数据。当数组下标0索引时,第 i 个元素的位置=首地址+ sizeof(a)。当数组下标以1索引开始时,第1个元素位置=首地址+ (i-l) sizeof (a)。相较加法而言,减法的运算量要更大,且其多进行了一次运算,因此选择使用0索引。
(2)逻辑短路
逻辑短路是指:当仅计算逻辑表达式中的一部分便能确定结果,则不会对整个表达式进行计算的现象。类似于电路中面对短路电路便会忽略与之并联的有电阻电路。对于“&&”运算符,当第一个操作数为false时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是false,对于“||”运算符,当第一个操作数为true时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是true。
(3)编译器自主性
编译器具有一定的自主性而可以自行选择先对函数中的哪个参数求值,这样做提高了编译器的效率。
(4)微调控制能力:
实际上,C与C++具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存。

3.第三准则:合乎日常习惯
理解:程序设计语言最终是给程序员使用的。一套不合乎日常习惯的规则,会给程序员的使用带来极大的不便性。在保证逻辑和准确性的情况下,程序语言的设计应该尽量贴合程序员的日常习惯。
具体表现:
(1)运算的优先级
程序员在数学中,乘法的优先级高于加法,先计算乘法再计算加法。同样,运用括号作为最高优先级而先进行其中的运算。这样的设计贴合程序员日常习惯,提升了工作效率。
(2)二维数组下标表示总行数和总列数:
例如a[2][5]用下标2和5表示一个2行5列的矩阵,合乎日常习惯。
(3)变量的命名与注释
在变量的命名中,除开第一个字符必须是字母或下划线,以及关键字的限制,程序员通常方便地可以运用字母,数字,下划线表达变量名或标识符的意义。并且如果变量名无法清楚地表明自身用途,还可在注释中进一步说明。提升了程序员读代码时效率。

4.补充准则:相似相同原则
理解:C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。从而使得这两个不同对象具有对方的相同行为。有利于程序的简化。
具体表现
(1)变量的初始化
如定义变量a等于5,一般是int a=5;
但也有int a(5); (括号的初始化,形似对象的初始化);还有int a={5};有int a{5};(形似数组的初始化);以及int a=({5});这种怪模怪样的初始化形式。
(2)数组的初始化
给定数组b[10],其初始化一般为b[10]={ };(中括号内不填,则默认初始为0;也可以依次填入数据进行初始化)
C++11标准中,初始化可以直接b[10]{ };(数组与变量的相似相同规则)
(3)引用初始化:
所谓引用,相当于给变量起个别名名。如int a=5;int &b=a;,值得注意的是,引用必须在定义时进行初始化。对于引用的初始化,除了有int &b=a;也有int &b(a);(引用与变量的相似相同规则)
(4)指针的初始化:
指针本身为变量,因此,变量该有的行为,指针同样都会有,只会多不会少。变量有八种初始化形式,因此,指针必然也会有八种初始化形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值