C++ 编程语言的四个基本规则及其具体体现
对这个准则的理解:
即一串代码不能有两种解释,只能有一种解释。 这个是所有的编程语言需要遵循的最高准则。 在我看来,机器和人类最大的区别也是根本性的区别就是:机器不能根据不同情况作出自己的选择。包括现在的人工只能,我认为也是在执行人的意识而不是自己作出想做的选择。
不能说我写了一行代码后,这个代码有两个意思,然后让机器去作出选择去执行哪个意思,就算机器可以作出选择,但是它所选择的哪个是不是编程者想要的呢?如果不是,那么对后面的程序会不会造成什么影响呢。 所以,显然,无二义性是一个编程有序进行下去,执行编程者期望的步骤,以及达到编程者想要的目的的必要的条件。
当然,我认为真正的人工智能的出现,也就是像《终结者》里面的机器人那样的有意识的机器人的出现,二义性是必须的,只有这样,它才能像人类一样思考,才能真正的智能化,意味着真正的物种的诞生。而且,在我看来,这个是计算机编程语言发展的一个必须经过的一个阶段。
准则的具体体现:
(1) 运算符的优先级与结合性。 优先级是为了消除诸如3+45 的表达式,是应该被当作 (3+4)5 还是3+(45)的二义性而设定的规则。 结合性是为了消除相同优先级之间的运算的二义性. 示例代码: int x = 3+45; int x=34/(32)
(2) 标识符不能以数字开头 如2E4这样的字符既可以表示变量名,也可以表示常量:2*10^4,这就是二义性。 还有因为标识符没有规定一个变量中三种字符的个数,如果支持以数字开头而又不修改变量中每种字符的个数的规定,那么像“123”这样的字符也是合法的变量名,这样一来所有的数字常量都可能看做变量,这也会造成二义性。 如果设法研究一个既可以以数字开头又不会造成这样的问题的,一方面难度太大,另一方面又会让程序员的记忆工作加大,很容易记不清楚,所以干脆不能以数字开头。
(3) 贪心规则 每个符号应该包含尽可能多的字符,也就是说,我们的编译器将程序分解成符号的方法是,从左到右一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,然后在判断已经读入的两个字符是否有可能是一个符号或者一个符号的组成部分,如果可能则继续读入下一个字符,然后重复整个过程,直到读入的字符组成的字符串已不再可能组成有意义的符号,这就是所谓的贪心法咯前提是符号的中间不能嵌有空格哦!(来源于https://blog.csdn.net/u011401496/article/details/38469321)
我对这个的理解就是,就像是我们打扑克牌的顺子,如果下一张牌能连接上,那么自然一块打出,一直到不能连接。
对这个准则的理解:
因为在计算机编程刚出来的时候,计算机的效率比现在低的多,而用计算机就是为了代替人类工作并且高效的完成任务,所以为了提高编程的效率,在设计 C ++ 编程语言的时候,自然要考虑高效性,并且把高效性放在了第二最高准则,也就是在满足计算机编程合理运行的之下,就考虑高效性这个也是体现了设计计算机的初衷。
但是随着科技的发展,计算机的运行效率数量级提升,所以高效性变得没有之前那么重要了。
具体体现:
1、比如,数组下标选择0索引而不是1索引,这样就会减少很多减法的计算。
因为在计算机里面,减的运算大于加法。因为减法实际上还是用加法进行计算的,比如8-2实际上运算的时候是8+(-2),计算机的减法运算中,运算的结果是需要再求一次补码的。
2、再如,c++引入了指针、内联函数、引用,这些使得c++更加高效。
比如,需要大量的重复进行一个操作,比如10次、100次、1000次、1亿次,如果使用函数,那么就可以使整个编码看起来整洁,而且会提高编写代码的速率。这能够大大的提高效率。
3、变量申请存储空间,系统分配的时候的规则
4、 逻辑短路 逻辑短路规则为对于表达式a&&b 当a为假时,b不会计算。
对这个准则的理解:
因为 C++ 的使用者是人类,所以在设计的时候,自然要考虑人类的使用习惯,不能说用些反人类的设定,比如用 “ - ” 代表加法等等,这样会降低编程的效率并且很容易让程序员在编写程序的时候出错,这样是违背第二准则的,而且就像编译语言一样,因为是偏向于机器语言,人类很难懂,现在只有少部分人掌握。而像一些高级语言,被广泛使用并且有竞争性。
具体表现:
这个方面在我们编程的时候觉得不别扭就可以体现到了,再如运算规则就是复合我们日常习惯的计算方式的。
对这个准则的理解:
对于一些有关联的,可能会相互相互影响,使得彼此有对方的一些特有的属性。 就类似于两个人在切磋武艺,在切磋的过程中,A可能发现B的某些武功很好,就学了过来,B发现A的某些武功很好,就学了过来,这样A有了B的一些招式,B有了A的一些招式。
具体表现:
1、如赋值时候 int a=1; int a(1); 是一样的,都是把1赋给a 这个是学的函数的
END…