1.1 曙光:C++11标准的诞生
1.1.1 C++11/C++0x(以及C11/C1x)——新标准诞生
2011年11月,在印第安纳州布卢明顿市,“八月印第安纳大学会议”(August Indiana University Meeting)缓缓落下帷幕。这次会议的结束,意味着长久以来以C++0x为代号的C++11标准终于被C++标准委员会批准通过。至此,C++新标准尘埃落定。从C++98标准通过的时间开始计算,C++标准委员会,即WG21,已经为新标准工作了11年多的时间。对于一个编程语言标准而言,11年显然是个非常长的时间。其间我们目睹了面向对象编程的盛极,也见证了泛型编程的风起云涌,还见证了C++后各种新的流行编程语言的诞生。不过在新世纪第二个10年的伊始,C++的标准终于二次来袭。
事实上,在2003年WG21曾经提交了一份技术勘误表(Technical Corrigendum,简称TC1)。这次修订使得C++03这个名字已经取代了C++98成为C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,核心语言规则部分则没有改动,因此,人们还是习惯地把两个标准合称为C++98/03标准。
注意 在本书中,但凡是C++98和C++03标准没有差异时,我们都会沿用C++98/03这样的俗称,或者直接简写为C++98。如果涉及TC1中所提出的微小区别,我们会使用C++98和C++03来分别指代两种C++标准。
C++11是一种新语言的开端。虽然设计C++11的目的是为了要取代C++98/03,不过相比于C++03标准,C++11则带来了数量可观的变化,这包括了约140个新特性,以及对C++03标准中约600个缺陷的修正。因此,从这个角度看来C++11更像是从C++98/03中孕育出的一种新语言。正如当年C++98/03为C++引入了如异常处理、模板等许多让人耳目一新的新特性一样,C++11也通过大量新特性的引入,让C++的面貌焕然一新。这些全新的特性以及相应的全新的概念,都是我们要在本书中详细描述的。