一、版本簡介
1. c++98:iso/iec 14882:1998
命名空間:std
最古老版本的c++標準
2. c++03:iso/iec 14882:2003
命名空間:std
3. tr1:c++ technical report 1
命名空間:std::tr1
作為c++03的擴充套件,但是其中一些最終被引入c++11
因為tr1只是c++03的擴充套件,因此編譯器本身不強制要求支援tr1。但是tr1中的大部分內容都在boost::tr1中有體現。
4. boost:
命名空間:boost
boost是基於c++03實現的乙個增強版的c++庫,他的很多庫已經被引入tr1,tr2,而tr1中大部分的內容已經引入c++11。
5. c++11(c++0x):iso/iec 14882:2011
命名空間:std
引入大部分tr1的內容
6. tr2:
c++ technical report 2
作為c++11的擴充套件
二、c++編譯器
1. 編譯器的結構
frontend用於做語法分析,將程式語言轉化成中間語言。
backend用於將中間語言轉化成機器語言。
gcc4.2的前端和後端都是gcc自己來實現的。
llvm-gcc的前端是gcc,後端是llvm
llvm compiler,也就是clang,前端是clang,後端是llvm
llvm本身是乙個後端
3. gcc與g++的區別
gcc:gnu compiler collection,本身是乙個工具集
g++:c++ compiler,因此是gcc的乙個子集,g++自動使用libstdc++,實際上g++還是用的gcc
4. libstdc++與libc++
mac下,前者使用的c++版本是c++03,後者是c++11,使用c++03編譯的庫與使用c++11的庫abi不相容
abi不相容:
4.1. 如何檢視乙個二進位制使用的lib:
otool -l
4.2. mac使用c++11編譯程式:
./configure cc=clang cxx=clang++ cxxflags='-stdlib=libc++'
C語言相關知識
在linux系統之中,eof根本不是乙個字元,而是當系統讀取到檔案結尾,所返回的乙個訊號值 也就是 1 linux中,在新的一行的開頭,按下ctrl d,就代表eof 如果在一行的中間按下ctrl d,則表示輸出 標準輸入 的快取區,所以這時必須按兩次ctrl d windows中,ctrl z表示...
C 繼承相關知識
在物件導向的程式設計中,有兩種截然不同繼承型別 實現繼承和介面繼承 1.實現繼承和介面繼承 實現繼承 表示乙個型別派生於基型別,它擁有該基型別的所有成員欄位和函式。在實現繼承中,派生型別採用基型別的每個函式的實現 除非在派生型別的定義中指定某個函式的實現 在需要給現有的型別新增功能,或許多相關的型別...
git 相關知識 一
git常用命令 git config list 檢視配置 git config global user.name username 設定使用者名稱 git config global user.email email example.com 設定郵箱 global引數 表示這台機器上所有的git倉庫...