第11章 兼容性的双刃

—— 即已有C,岂止于B……A……或亦@乎?

最初,编程语言的圣言镌刻于 BCPL(Basic Combined Programming Language 的缩写,绝非巴尔的摩县公共图书馆)之中。作为编译器领域的初代霸主,它以铁血般的语法统治了数个迭代版本。然而岁月无情,新特性、新范式、新语法层出不穷。不久之后,一位新的王位继承者从比特之海中崛起,那便是 B 语言。但世人鲜少理解 B 语言“无类型”设计的精妙之处。随着新一代王者候选 —— C语言https://www.bell-labs.com/usr/dmr/www/chist.html的出现,B语言很快退出历史舞台。

C 语言成为系统级编程的事实标准,其语法结构渗透进过去乃至本世纪所有主流编程语言之中(比如那无处不在的花括号 {})。它宛如计算机王国中的圣胶,将各类编程语言粘合在一起,共赴神圣仪式。

直到一位普罗米修斯式的人物没错,Bjarne Stroustrup,说的就是你。出现 —— 他将“类”的概念引入C语言,先是创造了“带类的C”(C with classes),随后开发出史上首个C++编译器Cfront(它能将C++代码转换为C代码,可惜已湮灭在时光长河中)。但它的遗产永存:这门语言本身、数十个在不同时期(或多或少)符合标准的C++编译器、数百种未定义行为案例,以及过去三十年间迭代的各个标准版本(最新可用的是C++23,而标准委员会正在酝酿更强大的C++26) —— 所有这些共同构成了我们挚爱的编程语言:C++。

本章将用以下话题让你如遇早高峰般寸步难离(却又欲罢不能):

  • C++真的向后兼容C吗?
  • C++真的向后兼容C++自身吗?