这个准则,不仅是C++的准则。更是所有类型编程语言的最高准则。或者说,更是任何逻辑体系的最高准则。无二义性保证向计算机输入的每一条指令都只有一种执行方式。编程语言出现二义性会导致灾难性的后果。 如运算符的优先性与结合性,变量名不能以数字开头,也不能是关键字,本质上都是为了消除二义性而设计的。
int x = 3*4+5 //运算符优先级(3+4)*5 3+(4*5) ?在C++语言出现之时,计算机的性能普遍较低。因此C++的早期语法规则对程序的运行性能有许多优化。比如操作A和B,若A和B都满足无二义性,但是A的性能比B的高效,则C++会优先采用A。 在许多现代语言中,高效性不再作为强制要求。并且在C++高级语法和标准库中,高效性已经不再是最高准则了。 如数组下标以0索引,逻辑短路——优先对并列条件的第一个作出判断等。
一套与日常习惯不相符的规则,会对程序员的使用带来极大的不便。因为日常语言的惯性是极其强大的。如果一门编程语言与日常习惯格格不入,人们就会放弃该语言。 特例:数组下标以0索引,在此对高效性的需求超过了对合乎日常习惯的追求。
指在语法上相似的规则会进行迁移合并。如在C++新标准中出现了以下的初始化赋值形式
int a=3; int a(3); int a{3}; int a={3}; //效果与第一句相同,注意花括号的初始化形式不允许默认类型转换