C++
世界上所有编程的人都在力扣国际版上做着编程比赛与刷题:https://leetcode.com/
如果英文水平不够也可以从国内的镜像版入手:https://leetcode-cn.com/
国内的一个优秀的题库:https://lib.nbdp.net 相关功能说明:https://docs.nbdp.net/
GNU GCC项目:https://gcc.gnu.org/ 这是世界上最通用的C++编译工具。国内可用的镜像
APPLE支持的一个C++编译器:https://llvm.org/
一个标准网站:https://isocpp.org/
一个英文网站:http://www.cplusplus.com/
参考教程:https://www.runoob.com/cplusplus/cpp-tutorial.html https://www.w3cschool.cn/cpp/ https://www.w3resource.com/cpp-exercises/
简介[编辑]
C++是一种被广泛使用的计算机程序设计语言。它是一种通用程序設計語言,支援多重编程模式,例如過程化程序設計、数据抽象、面向对象程序設計、泛型程序設計和设计模式等。
比雅尼·斯特勞斯特魯普博士在贝尔实验室工作期间在20世紀80年代發明並實現了C++。起初,這種語言被稱作“C with Classes”(“包含‘类 ’的C語言”),作為C語言的增強版出現。随后,C++不斷增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多繼承(multiple inheritance)、标准模板库(standard template library, STL)、异常处理(exception)、运行时类型信息(runtime type information)、命名空間(namespace)等概念逐漸納入標準。1998年,國際標準組織(ISO)頒布了C++程序設計語言的第一個國際標準ISO/IEC 14882:1998,目前最新标准为ISO/IEC 14882:2020。根據《C++編程思想》({Thinking in C++)一書,C++與C的代码执行效率往往相差在±5%之間 https://web.archive.org/web/20160206214150/http://www.stroustrup.com/bs_faq.html 。
运算符[编辑]
分為
優先權 | 運算子 | 說明 | 結合性 |
---|---|---|---|
1 | () | 括號 | 由左至右 |
2 | !、-、++、-- | 邏輯運算子NOT、算術運算子負號、遞增、遞減 | 由右至左 |
3 | *、/、% | 算術運算子的乘法、除法、餘數 | 由左至右 |
4 | +、- | 算術運算子加法、減法 | 由左至右 |
5 | <<、>>、>>> | 位元運算子左移、右移、無符號右移 | 由左至右 |
6 | >、>=、<、<= | 關係運算子大於、大於等於、小於、小於等於 | 由左至右 |
7 | ==、!= | 關係運算子等於、不等於 | 由左至右 |
8 | & | 位元運算子AND | 由左至右 |
9 | ^ | 位元運算子XOR | 由左至右 |
10 | | | 位元運算子OR | 由左至右 |
11 | && | 邏輯運算子AND | 由左至右 |
12 | || | 邏輯運算子OR | 由左至右 |
13 | ?: | 條件控制運算子 | 由右至左 |
14 | =、op= | 指定運算子 | 由右至左 |
发展历史[编辑]
C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向对象語言,並且憑藉着接近C語言的效率,在工業界使用的開發語言中佔據了相當大份額;第二階段從1995年到2000年,這一階段由於標準模板庫(模板:Lang)和後來的Boost等程式庫的出現,泛型程序設計在C++中佔據了越來越多的比重。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊;第三階段從2000年至今,由於以Loki、MPL(Boost)等程式庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最複雜的一員。
比雅尼·史特勞斯特魯普工作起於1979年的C with Classes。這個構思起源於斯特劳斯特鲁普做博士論文時的一些程式撰寫經驗。他發現Simula具備很利於大型軟體開發的特點,但Simula的執行速度太慢,無法對現實需求發揮功效;BCPL雖快得多,但它過於低階的特性,使其不適於大型軟體的開發。當斯特劳斯特鲁普開始在貝爾實驗室工作時,他有分析UNIX核心關於分散式計算的問題。回想起他的博士論文經驗,斯特劳斯特鲁普開始為C語言增強一些類似的特點。之所以選擇C,是因為它適於各種用途、快速和可移植性。除了C和Simula之外,同時也從其它語言中取得靈感,如ALGOL 68、Ada、CLU以及ML。
剛開始時,類別、衍生類別、儲存類型檢查、內聯和缺省参数特性,都是透過Cfront引入C語言之中。
1983年,C with Classes改命名為C++(++
是C语言中的增值操作符)。加入了新的特性,其中包括虛擬函式、函式名和運算子多載、參考、常數、使用者可控制的自由空間儲存區控制、改良的型別檢查,以及新的雙斜線(//
)單行註解風格。
1985年,發佈第一版《C++程式設計語言》,提供一個重點的語言參考,至此還不是官方標準。1985年10月出現了第一個商業化發佈。
1989年,發佈了模板:Lang。引入了多重繼承、抽象類別、靜態成員函式、常數成員函式,以及成員保護。1990年,出版了The Annotated C++ Reference Manual。這本書後來成為標準化的基礎。稍後還引入了模板、例外處理、命名空間、新的強制类型转换,以及布林类型。
隨著C++語言的演變,也逐漸演化出相應的標準程式庫。最先加進C++標準函式庫的是串流I/O程式庫,其用以取代傳統的C函式,如printf和scanf。隨後所引入的程式庫中最重要的便是標準模板庫,簡稱STL。
多年後,一個聯合的ANSI-ISO委員會於1998年對C++標準化(ISO/IEC 14882:1998)。在官方釋出1998標準的若干年後,委員會處理缺陷報告,並於2003年發佈一個C++標準的修正版本。2005年,一份名為Library Technical Report 1(簡稱TR1)的技術報告釋出。雖然還不是官方標準的一部分,不過它所提供的幾個擴展可望成為下一版C++標準的一部分。幾乎所有目前仍在維護的C++編譯器皆已支援TR1。
目前最新的C++标准是2020年12月发布的ISO/IEC 14882:2020,又称C++20。
雖然C++免專利,但標準文件本身並不是免費的,尽管标准文档不是免费的,但是很容易从网络中取得,最简单的就是C++标准文档之前的最后一次草稿版本,它与标准的差别几乎只在于排版上。
C++名字的由來[编辑]
C++這個名字是Rick Mascitti於1983年中所建議的,並於1983年12月首次使用。更早以前,尚在研究階段的發展中語言曾被稱為「new C」,之後是「C with Classes」。在電腦科學中,C++仍被稱為C語言的上層結構。它最後得名於C語言中的「++」運算子(其對變數的值進行遞增)。而且在共同的命名約定中,使用「+」以表示增強的程式。斯特劳斯特鲁普說:「這個名字象徵著源自於C語言變化的自然演進」。C+是一個和C/C++無關的早期程式語言。
Rick Mascitti在1992年被非正式地問起名字的由來,他表示這是在半開玩笑中說出的。他從沒想過C++會成為這門語言的正式名字。
有一個關於C++名字的笑話是,當你使用後綴++時,附加只發生在運算之後(因此,它應該是++C,而不是C++,这个笑话是说时下某些程序员还在以使用C的方式使用C++,这通常被一些权威著作认为是不正确的)。
C++帮助手册[编辑]
默认安装时,Linux中并没有C++的对应帮助手册,可通过下载安装的方法来手动增加这个功能。
下载手册[编辑]
wget http://mirrors.concertpass.com/gcc/libstdc++/doxygen/libstdc++-api-4.5.2.man.tar.bz2
解压手册[编辑]
tar -xvf libstdc++-api-4.5.2.man.tar.bz2
放到特定位置[编辑]
mv libstdc++-api-4.5.2.man/man3/* /usr/share/man/man3/
让man能够找到[编辑]
如cout要在
man std::iostream
命令结果中用/cout来查询对应的参数。
有些命令可以直接查询,比如:
man 3 sleep
或者使用C++在线手册