C++编程语言的基本准则

一、最高准则:无二义性

二义性是指一个C++语句所表达的含义含有两种或多种含义。这对于计算机运行计算而言时需要消除的。具体无二义性体现在一下几点:

1.运算符的优先级和结合性

优先级:运算符的优先级决定了运算符用于值的顺序,在C++中,运算符的优先级解决了程序在运算一些含有两个或多个运算符的语句时不知道应该先计算哪个的情况。
代码示例:

int a=3+4*5;
cout<<a<<endl;//输出结果为23

结果为23而非35,这也是由于运算符之间具有一定的优先级关系,从而就消除了这里二义性的影响

结合性:决定了计算顺序是左往右还是右往左,具体如下:

#include <iostream>
using namespace std;
int main()
{
	int a, b = 1, c = 2;
	a = b = c;
	cout << "a=" <<a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;	
}

这里输出的结果为a=2,b=2,c=2,表明a=b=c是从右往左运算,而非从左往右,这就消除了二义性的影响

2.标识符不能以数字开头

C++中标识符不能以数字开头,这也是便于区分变量与常量的区别,同时遵循无二义的准则。假如用数字开头。不仅会让计算机难以区分变量和常量,还可能会增加计算机运算时间。从而降低效率。

3.贪婪规则

贪婪算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
贪婪规则一定程度上可以减少代码运行出现错误的可能,但是换个角度看可能会导致程序员在理解代码是出现障碍。因此,在一定条件下,可以尽量减少运用贪婪规则的时候,这样代码也更容易让其他人看懂。

二、第二高准则:高效性

C++语言将高效性作为次高准则,是因为C++语言出现时,计算机性能普遍较低,因此计算机性能是一个重要的制约因素,是当时情境下的“主要矛盾”。
如果有两个行为A与B,均满足无二义的规则,且A比B高效,则C++语言会选择A行为作为标准语法。
并非所有语言,都有对高效性的绝对准求。
高效性准则只对基础的C++语法规则有效,在STL库与模板中,已经不再是次高准则了。
高效性具体体现在:

1.数组下标0索引

0索引时:&a[i] = &a[0] + i * sizeof(a[0])
1索引时:&a[i] = &a[1] + (i-1)*sizeof(a[0])
这里不难发现。1索引比0索引多计算了一个减法,对于计算机而言,计算减法是更加复杂的,会明显降低效率。在计算机内,加法是很简单的,而减法则需要运用到补码,这中间的计算过程,会大大减低运行效率,不符合高效性准则的初衷。在大多数编程语言来说,大部分都是采用0索引,例如:C、C++、python等,也有少部分使用1索引,主要原因应该是取决于开发者的任性。

2、逻辑短路

逻辑短路是对于逻辑运算而言,是指,仅计算逻辑表达式中的一部分便能确定结果,而不对整个表达式进行计算的现象。
对于“&&”运算符,当第一个操作数为false时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是false;
对于“||”运算符,当第一个操作数为true时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是true。
在这里,符合一定的条件,就会减少下一步的计算,这一目的也是为了计算机的高效性。

3、微调控制能力

C与C++具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存。

4、编译自主性

编译器具有一定的自主性而可以自行选择先对函数中的哪个参数求值,从而提高编译器的运行效率。

三、第三准则:合乎日常习惯

因为程序设计语言是最终给程序员使用的,一套不合乎日常习惯的规则,会给程序员的使用带来极大的不便性,因为日常习惯的惯性是极其强大的,这样会迫使程序员放弃该语言。
具体体现:

1.内置函数命名

对于内置函数的命名往往是以这个函数的作用的英文命名的,符合日常习惯,在调用时也比较方便。

2.二维数组下标表示总行数和总列数

例如a[3][4]用下标3和4表示一个3行4列的矩阵,合乎日常习惯。

3.运算的优先级

这一点不但体现最高准则无二义性,也体现了合乎日常习惯准则,因为这大部分与数学中运算顺序相契合,让程序员更容易接受,学习。

四、相似相同原则

C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。
具体体现:
(1)变量初始化
(2)数组初始化
(3)列表初始化
(4)指针初始化
括号初始化,是变量与对象之间的“相似相同规则”;列表初始化,是变量与数组之间的“相似相同规则”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值