C++语言基本准则

1. 最高准则:无二义性。

对这个准则的理解:
如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。这个准则不仅是C++的准则,更是所有类型编程语言的最高准则。或者说,更是任何逻辑体系的最高准则,如数学领域。数学界的三次数学危机,本质上就是为了消除“二义性”的争端。比如本班和隔壁班都有个张三,呼叫“张三”就存在二义性,但叫“隔壁班的张三”就无二义性。

准则的具体体现:
(1) 运算符的优先级与结合性。
优先级是为了消除诸如3+4* 5 的表达式,是应该被当作 (3+4)* 5 还是3+(4* 5)的二义性而设定的规则。C++运算符优先级有18个级别,其中乘除运算符位于第五级别,加减运算符位于第六级别,因此先乘除后加减。这个规则消除了这种二义性。
当运算符的优先级相同时,计算过程便由结合性决定。C++中除了单目运算符、三目运算符以及赋值运算符是从右往左的以外,其他运算符的结合性均为从左往右。
示例代码:

#include <iostream>
using namespace std;

int main()
{
	int x = 3 + 4 * 5;
	cout << x;
};

输出结果

(2) 标识符不能以数字开头
如果以数字开头,无法判断它是常量还是变量,即与常量的定义相冲突,C++会将这种行为指定为非法行为。
(3) 贪心规则
C++规定,每个符号应该包含尽可能多的字符。当从左到右读入字符(无空格)时,如果该字符有意义,那么读取下一个,再判断这两个字符连一起是否可能构成有意义的符号,如果能,继续读入字符,判断这三个字符形成的字符串是否可能构成有意义的符号,循环往复,直到下一个字符与前面的字符无法组成有意义的符号,从而形成尽可能长的有意义的字符串。比如++i+++++i++i++的值。

2. 第二高准则,高效性
C++语言将高效性作为次高准则,是因为C++语言出现时,计算机性能普遍较低,因此计算机性能是一个重要的制约因素,是当时情境下的“主要矛盾”。但需要说明,并非所有语言都有对高效性的绝对准求。高效性准则只对基础的C++语法规则有效,在STL库与模板中,已经不再是次高准则了。
(1) 数组下标0索引。
如果采用0索引,索引可以表示为&a[i] = &a[0] + i * sizeof(a[0])。
如果采用1索引,索引可以表示为&a[i] = &a[0] + (i-1) * sizeof(a[0])。
显然,采用1索引时需要多进行一道减法运算,因此对于计算机来说如果采用0索引提高了一定的效率。
(2) 逻辑短路
逻辑短路规则为,对于表达式a&&b,当a为假时,b不会计算 ;对于表达式a||b,当a为真时,b不会计算。即“与”逻辑前面为0,“或”逻辑前面为1,都会发生短路,从而提高判断效率。

3.第三准则,合乎日常习惯
程序设计语言最终还是给程序员使用的。由于日常习惯的惯性极其强大,一套不合乎日常习惯的规则,会给程序员的使用带来极大的不便性,这样会迫使程序员放弃该语言。比如一个整数可以给一个实数赋值。

4.补充准则,相似相同规则
C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑上具有相似性,则C++会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。
如中国人吃饭用筷子,外国人吃饭用叉子,他们交流一番后,外国人学会了用筷子,中国人学会了用叉子,然后人类的吃饭方式就统一为筷子与叉子的集合。
就变量的几种初始化方式来看,其本质是C++将变量、对象及数组统一对待的原则的产物。

#include <iostream>
using namespace std;

int main()
{
	int i;

	//等号初始化
	int k = 5;     // 使用同类型的常量来初始化
    int k = i;	   // 使用同类型的变量来初始化

	//括号初始化,是变量与对象之间的“相似相同规则”
	int k(5);      //C++特有的初始化形式
	int k(i);      // C++特有的初始化形式

	//列表初始化,是变量与数组之间的“相似相同规则”
	int j{ i };
	int j{ 5 };
	int j = { i };
	int j = { 5 };
};

从原理上来说,引用不是变量。但由于相似相同原则,C++给引用提供了两种初始化形式:

#include <iostream>
using namespace std;

int main()
{
	int i;
	int& j = i;	// 与int j=i相似
	int& j(i);	// 与int j(i)相似
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值