C++
维基百科,自由的百科全书
C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程式程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
贝尔实验室的比雅尼·斯特劳斯特鲁普博士在20世纪80年代发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准。
另外,就目前学习C++而言,可以认为它是一门独立的语言;它并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言。
C++语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的衝擊;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。
目录 |
[编辑] C++名字的由来
C++是Rick Mascitti在1983年夏天起的名字,第一次被使用是在1983年12月。早些时候,它在研发阶段还被称作“新的C”,之后是“包含类的C”。它最后得名于C语言中的“++”操作符。"++"是C的增量运算符。在C/C++中,对变量a,a++表示“把a加一并返回a原来的值”,++a表示“把a加一并返回新值”。斯特劳斯特鲁普说:“这个名字意味着C++较C的进化的性能。”C+是一个和C/C++无关的较早的编程语言。Rick Mascitti在1992年被非正式地问起名字的由来,他指出C++是半开玩笑中弄出来的。他从没想过C++会成为这门语言的正式名字。
[编辑] C++规则
在《C++设计与进展》(1994)中,Bjarne Stroustrup描述了一些他在设计C++时的规则。知道这些规则无疑会对理解C++为什么是现在这样有帮助。下面例举了一些规则:(更多详细内容可以参阅《C++设计与进展》)
C++是想设计成一门和C一样轻便有效的,静态数据类型检查的,多用途的程序设计语言。
C++是想设计成直接地包含性地支持过程式程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
C++想给编程者选择权,即使这回导致编程者选择错误。
C++想尽量和C一致,这样就能提供一个从C到C++的平滑转换。
C++避免没有普遍用途的性质。
C++想在一个不是很技巧的编译环境下运行。
[编辑] C++中的特色
和C语言相比,C++有一些其他的特色,比如陈述性的申明,像函数一样的现实类型转换,new/delete操作符,布尔型,引用类型,缺省量,函数重载,名空间,类(包括所有和类相关的属性,如继承,成员函数,虚函数,抽象类),操作符重载,模版,::操作符,异常处理和返回类型鉴定。C++在某些时候执行比C更多的类型检查。
和一般的认识相反,C++不是第一个引入const关键词的。Const被正式地加入C不久才被运用于C++。以“//”开始的注释也是起先在C的前身BCPL出现而后被重新引入到C++的。
一个常见的疑惑其实是一个细微的术语问题:因为C++是从C中衍生而来的,在C++中“对象”和C语言一样意味着内存空间,不是一个类的实例,而在其他绝大多数面向对象的语言中都是后者。
[编辑] C++的Hello World程序
在使用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显示“Hello, world!”然后结束运行:
#include <iostream> int main() { std::cout << "Hello, world!\n"; }
在使用兼容C99标准(ISO/IEC 14882-1998)的编译器时,下面的程序也是可以的:
#include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; }
根据ISO C++的规定,main函数的形式只能是
int main() { ... }
以及
int main(int argc,char * argv[]) { ... }
尽管如此,但在大部份编译器上,
void main() { .... }
也被支持。
[编辑] C++程序员的数量
分析机构EvansData定期对开发人员展开调查,其调查结果与Stroustrup提出的C++正在扩张的说法相违背。EvansData的数据显示,以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%。
Forrester最新的调查显示,C++、微软VisualBasic和Java是众多公司产品体系的首选语言。对100家公司的调查显示,C/C++、VisualBasic和Java在产品体系中的使用比例分别是59%、61%和66%。