C 中的易混淆的返回型別

2021-06-26 08:36:55 字數 1161 閱讀 5644

最近在看標準庫時碰到很多容易混淆的知識點:

vector原始碼實現中:

typedef size_t   sizetype ;

typedef  ptrdiff_t  defference_type ;

就有以上這兩句話,在c++ primer也總是看到這幾種型別。

1.size_type型別

事實上size_type是乙個無符號型別的值。

string::size_type 表示的是標準庫中string型別的size()函式返回的的值,表示string物件的大小。

vector::size_type 表示的是標準庫中vector容器的size()函式或capacity()函式返回的的值,表示vector物件中元素個數的大小或vector空間大小。

但是為什麼不直接返回無符號型別的值呢?那是因為無符號型別的值在不同機器上的大小是不同的。

使用這個型別體現了標準庫與機器無關的乙個特性。還有其他標準資料庫型別定義了配套的型別來解決這個問題。

2.difference_type型別

difference_type型別是與迭代器相關聯的乙個概念。

它表示指向同乙個容器的兩個迭代器之間的距離,顯然它是乙個有符號型別的。

3.size_t型別

size_t型別是在使用陣列時碰到的乙個型別。在使用陣列下標時經常將其定義為size_t型別。size_t型別是乙個與機器相關的無符號型別,它被設計得足夠大以便能夠表示記憶體中任意物件的大小。size_t型別是在cstddef標頭檔案中定義的,這個檔案是c標準庫stddef.h標頭檔案的c++語言版本。試想如果在遍歷陣列時只是定義為long,當陣列中的元素遠大於long表示的範圍,那麼確定能夠保證便利到所有的陣列中的所有元素嗎?

sizeof()的返回型別就是size_t型別

4.ptrdiff_t型別

ptrdiff型別就兩個指標相減返回的結果型別,ptrdiff_t型別也是在cstddef標頭檔案中定義的乙個與機器相關的型別,只是它是乙個有符號型別。

5.constexpr型別

const expression的意思,把變數宣告此型別由編譯器來判斷該變數值是否是乙個常量表示式。

6.auto型別

讓編譯器幫助我們去分析表示式屬於的型別,並可以使用表示式的值來初始化該變數。

7.decltype型別

返回表示式的型別。

中易混淆的資料型別

1 char varchar text和nchar nvarchar ntext char和varchar的長度都在1到8000之間,它們的區別在於char是定長字元資料,而varchar是變長字元資料。所謂定長就是長度固定的,當輸入的資料長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度...

JQuery中易混淆的概念

向每個匹配的元素內部追加內容。i would like to say i would like to say hello 把所有匹配的元素追加到另乙個 指定的元素集合中。i would like to say i would like to say i would like to say i wou...

numpy中的易混淆點

論numpy中matrix 和 array的區別 numpy matrices必須是2維的,但是 numpy arrays ndarrays 可以是多維的 1d,2d,3d nd matrix是array的乙個小的分支,包含於array。所以matrix 擁有array的所有特性。在numpy中ma...