[英]size_t on XCode
在XCode上我似乎需要在Visual C ++上使用std :: size_t而不是size_t。 但這是一個痛苦,因為我真的不想要#include <cstddef>
並在我的代碼中將每個size_t
更改為std::size_t
...在我的Windows代碼size_t
工作時不包含任何其他文件。
有沒有辦法讓我現有的代碼在XCode中運行(可能通過.pch文件?)或GCC / MSVC ++在這方面根本不同,我的代碼需要使用std::size_t
才能跨平台?
根據C ++ 03標准,17.4.1.2.4:
除第18條至第27條所述外,每個標題cname的內容應與ISO / IEC 9899:1990編程語言C(第7條)或ISO / IEC中規定的相應標題名稱h的內容相同。 :1990編程語言-C修正案1:C完整性,(第7條),酌情包括在內。 但是,在C ++標准庫中,聲明和定義(在C中定義為宏的名稱除外)在命名空間std的命名空間范圍(3.3.5)內。
換句話說,通過選擇使用<cstddef>
而不是<stddef.h>
,您特別要求類型size_t在命名空間std中。
那么,以下是選擇:
改為使用<stddef.h>
,因此size_t
位於頂級命名空間中,如Jesse Good所建議的那樣。
使用<cstddef>
並使用std::size_t
。
使用<cstddef>
並使用using聲明將size_t
拉入頂級命名空間,如cnicutar所示。
當然,你可以依賴這樣一個事實:一個特定版本的一個編譯器/庫/平台可以讓你逃脫它,或為每個平台編寫不同的代碼,或用autoconf包裝整個事件,或編寫代碼生成器或sed基於預處理器,或者其他什么......但為什么呢?
也許在靠近頂部的地方說這個?
using std::size_t;
使用#include <stddef.h>
。
那么, #include <stddef.h>
和#include <cstddef>
之間的區別是什么?
<cstddef>
是一個C ++頭文件,保證在std
命名空間中定義所有符號,也可以在全局命名空間中定義內容。
<stddef.h>
是一個C頭和保證以限定在全局命名空間的所有符號,並在還可以限定事std
命名空間。
因此,正如您在Visual Studio上所說的那樣,可以使用size_t
因為它會將size_t
注入全局命名空間(可能已包含“stddef.h”)。 如果你想在任何編譯器上工作,請包括stddef.h
。
(但是,作為純C ++粉絲,我個人更喜歡std::size_t
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.