1,什麼是“c++”?
C++的發展歷程是一個不斷演進和完善的過程,以下是其主要發展階段:
- 起源(1979–1985):1979年,Bjarne Stroustrup在貝爾實驗室開始給C加入類,受Simula面向對象思想影響,用於系統編程和網絡仿真,最初稱為“C with Classes”。1983年,語言名字正式變為C++,象徵在C基礎上“自增”,此時具備了class、inline、//註釋、函數重載等關鍵特性。1985年,《The C++ Programming Language》第一版出版,成為C++的事實標準。
- 工具化與語言成型(1985–1990):這一時期主要通過Cfront編譯器以源碼到源碼(C)轉換方式實現C++。期間加入了虛函數、繼承、多重繼承、const、引用、運算符重載、模板等特性。但由於沒有正式標準,導致編譯器方言多,兼容性碎片化。
- 標準化前夜(1990–1998):早期模板使用有侷限,不同編譯器實現差異大。1994年-1998年,ANSI/ISO標準委員會(WG21)開展相關工作,Alexander Stepanov的STL被整合,確立了容器+迭代器+算法的泛型編程範式。
- 第一個ISO標準的奠基(1998–2003):1998年,C++98標準發佈,形成“經典C++”,包含了類、繼承、多態、異常、模板等特性,RAII模式被確認為推薦的資源管理方式。2003年發佈的C++03標準主要是對C++98的缺陷修訂,無重大語義新特性。
- 革命性轉折:C++11(2011年):被稱為“Modern C++”的起點,核心目標是性能不降、表達力增強、保持零開銷抽象。新增了移動語義與右值引用、auto類型推導、Lambda表達式、智能指針、標準併發庫等特性,使C++的寫法發生了重大變化。
- 增量迭代:C++14(2014年):對C++11進行了完善,引入了泛型lambda、變量模板、返回類型推導等特性,口號是“Complete C++11”。
- 工程友好提升:C++17(2017年):增加了if/switch帶初始化、結構化綁定、inline變量等特性,引入了std::optional、std::variant等新庫,更關注語義表達和零拷貝視圖等,同時移除了tr1、舊的auto_ptr等。
- 現代語言完成度飛躍:C++20(2020年):被視為C++的第二次質變,引入了Concepts、Ranges庫、Coroutines、Modules等重要特性,增強了constexpr,提升了錯誤信息可讀性和接口語義。
- 工具性增強:C++23(2023年):對Ranges進行了擴展,增加了std::expected用於錯誤處理,加強了對constexpr動態內存的支持,還引入了文本格式化std::print等特性。
未來,C++還將朝着靜態反射、統一異步模型、網絡庫標準化等方向繼續演進。
基本語法
C++ 基本語法圍繞“程序結構、數據類型、控制流、函數”四大核心,以下是最關鍵的基礎要素:
一、程序基本結構(Hello World 示例)
所有 C++ 程序需包含 主函數 main() (程序入口),且代碼需通過頭文件引入依賴庫。
基本結構
cpp
’’’
// 1. 引入頭文件(輸入輸出庫)
include <iostream>
// 2. 使用標準命名空間(避免重複寫 std::)
using namespace std;
// 3. 主函數(程序唯一入口,返回 0 表示正常結束)
int main() {
// 4. 輸出語句(cout 用於輸出,<< 是流插入運算符)
cout << "Hello, C++!" << endl;
return 0; // 主函數返回值(可省略,C++11 後默認返回 0)
}
’’’
核心基本語法
1. 註釋(不參與編譯,用於説明代碼)
- 單行註釋: // 這是單行註釋
- 多行註釋: / 這是多行註釋,可跨越多行 /
- 數據類型(存儲不同類型的數據)
C++ 數據類型分“基本類型”和“複合類型”,常用基本類型如下:
表格
類型 説明 示例
int 整型(4字節,存整數) int age = 20;
double 雙精度浮點型(存小數) double score = 95.5;
char 字符型(1字節,存單個字符) char ch = 'A';
bool 布爾型(存 true/false) bool isPass = true;
string 字符串型(需引入 <string> 頭文件) string name = "Tom";
3. 變量與常量
- 變量:值可修改,聲明格式 類型 變量名 = 初始值; (初始值可選,建議初始化)
-
示例: int num = 10; num = 20; (後續可修改值) - 常量:值不可修改,兩種聲明方式:
- const 類型 常量名 = 值; (常用): const double PI = 3.1415;
- #define 常量名 值 (預處理指令,無類型): #define MAX 100
- 控制流(控制代碼執行順序)
- 條件判斷: if-else / switch
示例(if-else):
cpp
int a = 5;
if (a > 3) {
cout << "a 大於 3" << endl;
} else {
cout << "a 小於等於 3" << endl;
}
- 循環: for (固定次數) / while (條件滿足時循環) / do-while (至少執行一次)
示例(for 循環輸出 1-5):
cpp
for (int i = 1; i <= 5; i++) { // 初始化;循環條件;更新變量
cout << i << " ";
}
- 函數(代碼複用單元,需“聲明+定義”)
- 聲明:告訴編譯器函數的“類型、名、參數”,通常在頭文件或代碼頂部
示例: int add(int x, int y); (聲明一個返回 int、接收兩個 int 參數的函數) - 定義:實現函數邏輯
示例:
cpp
// 函數定義(實現加法)
int add(int x, int y) {
return x + y; // 返回計算結果
}
// 主函數中調用
'''
int main() {
int sum = add(3, 5); // 調用 add,sum 得到 8
cout << sum << endl;
return 0;
}
'''
三、關鍵語法規則
語句必須以 分號 ; 結尾(函數體、代碼塊用 {} 包裹,內部語句需分號)。
區分大小寫( main 和 Main 是兩個不同的名字)。
命名規則:變量/函數名由“字母、數字、下劃線”組成,不能以數字開頭,不能用關鍵字(如 int 、 if )。
3,和python的不同點
C++ 與 Python 的核心差異體現在 執行方式、類型機制、語法風格、性能與適用場景 上,以下是關鍵區別的對比:
- 執行方式:編譯型 vs 解釋型
- C++:編譯型語言。代碼需通過編譯器(如 GCC、Clang)編譯成機器碼,生成可執行文件後才能運行,編譯過程會提前檢查錯誤。
- Python:解釋型語言。代碼無需編譯,由解釋器(如 CPython)逐行讀取並實時執行,無需生成獨立可執行文件,啓動快但運行中可能暴露錯誤。
- 類型機制:靜態類型 vs 動態類型
- C++:靜態類型。變量聲明時必須指定數據類型(如 int a; ),類型在編譯期固定,不可動態修改,編譯器會提前做類型校驗,減少運行時錯誤。
- Python:動態類型。變量無需聲明類型(如 a = 5 ),類型由賦值的值決定,且可動態改變(如 a = "hello" 可直接修改 a 的類型),類型錯誤僅在運行時暴露。
- 內存管理:手動 vs 自動
- C++:手動管理。需通過 new 手動分配內存、 delete 手動釋放內存,若忘記釋放會導致內存泄漏,需開發者關注內存生命週期(現代 C++ 可通過智能指針 shared_ptr 簡化)。
- Python:自動管理。內置垃圾回收(GC)機制,會自動識別並釋放不再使用的內存,開發者無需手動操作,降低內存管理成本。
- 語法風格:嚴謹繁瑣 vs 簡潔靈活
表格
對比維度 C++ 特點 Python 特點
代碼結構 必須有 main() 函數作為入口,語句需以 ; 結尾 無強制入口函數,語句無需
分號,靠縮進區分代碼塊
函數定義 需聲明返回類型和參數類型(如 int add(int x) ) 無需聲明類型(如 def
add(x): ),返回類型由內容決定
類與面向對象 需顯式定義 class ,支持多重繼承、虛函數等複雜特性 同樣支持
class ,語法更簡潔,默認單繼承,特性更輕量化
示例(打印) cout << "Hello" << endl; (需引入 <iostream> )
print("Hello") (無需引入庫,直接使用)
5. 性能:高性能 vs 中低性能
大標題
- C++:性能接近硬件極限。編譯為機器碼直接運行,無解釋器開銷,且支持指針、內存直接操作,適合對速度和資源佔用敏感的場景(如遊戲引擎、嵌入式)。
- Python:性能較低。解釋執行+動態類型帶來額外開銷,運行速度通常是 C++ 的 50-100 倍慢,需通過調用 C/C++ 擴展(如 NumPy)提升性能。
- 適用場景:底層/高性能 vs 快速開發/腳本化
- C++:適合 底層開發、高性能場景,如操作系統內核、遊戲引擎、嵌入式設備、高頻交易系統、工業軟件等。
- Python:適合 快速開發、腳本化場景,如數據分析(Pandas/NumPy)、人工智能(TensorFlow/PyTorch)、Web 後端(Django/Flask)、自動化腳本、日常工具開發等