C 標準庫 第二章 一般概念

2021-09-23 14:34:00 字數 2244 閱讀 5115

【c++標準庫】:第二章:一般概念

標籤(空格分隔):【c++標準庫】

c++標準庫的幾個基本概念:1. 命名空間(namespace) std; 2. 標頭檔案(header file) 的名稱與格式;3. 差錯和異常(error and exception) 處理的一般概念;4. 可被呼叫的物件(callable object); 5. 併發及多執行緒(concurrency and multithreading)的基本概念;6. 分配器(allocator)介紹

c++標準庫的所有識別符號都被定義於乙個名為 std 的 namespace 中。c++中還包含由tr1引入,被定義於 namespace std::tr1 內的所有識別符號。

基於namespace帶來的概念,如果想使用c++標準庫的任何識別符號,有三種選擇:

//1. 直接指定識別符號

std:cout << std:hex << 3.4 << std:endl;

//2. 使用using declaration

using std::cout;

using std::endl;

cout << std::hex << 3.4 << endl;

//3. 使用 using directive

using namespace std;

cout << hex << 3.4 << endl;

c++ standard 引入來了一套新的標頭檔案命名風格。

之前,標頭檔案的副檔名五花八門,包括 .h, .hpp, .hxx 等。

如今,標準頭副檔名十分簡潔:根本沒有副檔名。

事例:

//引入標準標頭檔案:

#include#include//引入c標準標頭檔案:新增字首字元c, 不再使用擴充套件字元.h 以區分c++標頭檔案和c函式的標頭檔案。

#include//was //為了向後相容c,舊式的c標準標頭檔案依舊有效

#include//ok

//對於舊式的c++標頭檔案,它們不再收到支援,但現實中大多數編譯器為相容還是保留了它們,但有些編譯器不支援,例如:

#include//error in xcode

注意,從作業系統的角度來看,新的標頭檔案命名方式並非一定意味著標準標頭檔案沒有副檔名。針對標準標頭檔案而寫的include該如何處理由編譯器決定,編譯器/c++系統可能自動新增乙個副檔名,甚至可能使用內建宣告而根本不讀入任何檔案。

當然,現實中,大部分c++標準標頭檔案並沒有副檔名,因為大多數作業系統只是簡單含入乙個「名稱於include語句中的檔名完全相同」的檔案。基於以上原因,對於自己寫的標頭檔案,新增乙個副檔名有助於在檔案系統中快速識別它們。

c++ 標準庫由不同的成分構成。**不同,設計與實現風格迥異。

差錯處理和異常處理正式這種差異的典型表徵。

標準庫中有一部分,例如string class, 支援具體的差錯處理,它們檢查所有可能發生的錯誤,並在錯誤發生時丟擲異常。但是在另外一些部分,例如stl和valarray中,效率大於安全,因此幾乎不會檢查邏輯錯誤,只有當在runtime時期發生錯誤才丟擲異常。

所有被語言本身或標準庫丟擲的異常,都派生自基類 exception, 定義於 . 它們是若干標準異常類的基類,它們共同形成乙個體系:

以上標準異常類可以被分為三組:1. 語言本身支援的異常;2. c++標準庫發出的異常;3. 程式作用域(scope of a program)之外發出的異常。

執行期間,當乙個加諸 reference 身上的 「動態型別轉換」 失敗時, dynamic_cast 會丟擲 bad_cast 異常,此異常定義於.

執行期類別辨識( rtti)過程中,如果交給typeid操作符的實參為0或為空指標時,typeid操作符會丟擲bad_typeid 異常,此異常定義於.

定義於內的bad_exception 異常用來處理非預期的異常。它可以由函式 unexpected() 丟擲,該函式會在「某個函式丟擲的異常不在異常明細(exception specification)內」時被呼叫。但在c++11起已經不再鼓勵使用異常明細。

invalid_argument 表示無效實參。例如將 bitset 中的char以 非』0』 和』1』 進行初始化。

length_error 指的是某個行為

第4章 一般概念

一 命名空間std 1.namespace具有可擴充套件開放性,可發生於任何原始碼檔案上。2.欲使用c 標準庫的任何東西,有三種選擇 1 直接指定識別符號。如std cout 2 使用using declaration。如 using std cout 3 使用using directive。如us...

第二章 C 筆記

1.可以用函式sizeof來確定乙個型別占用記憶體的大小 如 cout 2.整數除法的結果仍為整數,小樹部分會被截去。如,5 2 2 5 2 2 而不是 2.5 模運算 只有當被除數 前面的那個數 是負數時候,餘數才會是負數。如 7 3 1 12 4 0,20 13 7 而不是 7 3.型別轉換並不...

C 第二章學習

在c 中用同一名字定義多個函式,多個同名函式的個數和型別可以完全不同。int abs int n double abs double n 當同樣名字的函式出現在同一作用域內,就是函式過載。一般過載函式執行相同的功能。必須有兩種差別之一 1 乙個或多個引數的型別不同。2 函式的引數個數不同。如果內部變...