C++语言的四个准则、

一、最高准则:无二义性

1.对这个准则的理解:同一条C++语句不能同时具备两种或多种含义,每一条C++语句只能通过一种方式执行,得到唯一结果。

二义性问题
1.在继承时,基类之间或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。
例子:
在这里插入图片描述

2.当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生另一种不确定性——路径二义性。
例子:
在这里插入图片描述
2.准则的具体体现 :
1)运算符的优先级与结合性。
优先级:先乘除后加减、有括号先算括号内的。 结合性:若一个运算对象两侧的运算符优先级相同,按规定的结合方向:算术运算符——自左向右,赋值运算符——自右向左。
2)标识符不能以数字开头
为了让标识符只能是标识符,例如:假若没有这条规则,那么“246”是标识符还是常量?就不好区分了,这条规则的制定很好地消除了此类二义性。
3)贪心规则
每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果字条可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字条,重复上述判断,直到读入的字符组成的字符串已经不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等)。这种策略得到的是最优解,故而可以消除其他解的二义性。

二、次高准则:高效性
对这个准则的理解:C++编程语言出现时,计算机性能普遍较低,所以计算机性能是个重要的制约因素,也是主要矛盾,随着计算机逐渐发展,性能逐渐提高,高效性就不再是很多语言的次高准则了。如果有两个行为A与B,均满足无二义的规则,且A比B高效,则C++语言会选择A行为作为标准语法。
(1)数组下标0索引

数组下标0索引是为了提高计算时的效率,由不同语言有不同的命名方式:
0索引:&a[i] = &a[0] + i * sizeof(a[0])
1索引:&a[i] = &a[0] + (i-1) * sizeof(a[0])
显然以0索引的方式可以更高效地计算.
(2)逻辑短路问题
&& 运算,当前面为0时,后面则不进行计算,发生短路
|| 运算,当前面为1时,后面则不进行计算,发生短路

三、合乎日常习惯

理解:就是让C++编程语言对程序员来说用的顺手,符合日常用语习惯。

1)运算的优先级
在数学中,乘法的优先级高于加法,先计算乘法再计算加法,在C++中也是如此,符合日常习惯,给编写带来了极大方便。
二维数组下标表示总行数和总列数。
例如a[3][4]用下标3和4表示一个3行4列的矩阵,合乎日常习惯
准则的具体体现:
(1)语句的命名:循环语句、结构体等等采用英语单词,便于理解。
例如:while、do·····while
(2)运算时的优先级:先乘除后加减、有括号的先算括号里的等等。

四、补充规则:相似相同规则
对这个规则的理解:如果有两个不同的对象具有相似的行为,那么C++会为这两个对象额外增加对方的行为,使得这两个不同对象具有对方的相同行为。有利于程序的简化。

准则的具体体现: 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};变量与数组之间的“相似相同规则”
括号初始化是变量与对象之间的“相似相同规则”;列表初始化是变量与数组之间的“相似相同规则”。本质上是C++将变量、对象及数组统一对待的原则的产物

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值