<cmath>
またはのような C から継承された関数を使用する場合、<cstdlib>
それらを標準の名前空間の一部として修飾する必要がありますstd::log
か、それとも C スコープにとどまってグローバル関数として使用する必要がありますか? どうsize_t
ですか?
1 に答える
たとえば、使用する場合<math.h>
いいえ、すべきではありません。
std
特定の実装の名前空間で利用できるかどうかは不明です。
[C++11: D.5/2]:
それぞれが の形式の名前を持つすべての C ヘッダーはname.h
、対応するヘッダーによって標準ライブラリ名前空間に配置された各名前cname
がグローバル名前空間スコープ内に配置されているかのように動作します。これらの名前が最初に名前空間の名前空間スコープ (3.3.6) 内で宣言または定義され、次に明示的なusing 宣言(7.3.3)std
によってグローバル名前空間スコープに注入されるかどうかは指定されていません。
ただし、次のヘッダーは使用しないでください。
[C++11: C.3.1/1]:
標準 C ライブラリとの互換性のために、C++ 標準ライブラリは 18 個の C ヘッダー (D.5) を提供しますが、それらの使用は C++ では非推奨です。
たとえば、使用する場合<cmath>
はい、そうすべきです。
特定の実装のグローバル名前空間で利用できるかどうかは不明です。
[C++11: 17.6.1.2/4]:
第 18 条から第 30 条および付属書 D に記載されている場合を除き、各ヘッダーの内容は、C 標準ライブラリ (1.2) または C Unicode TR で適切に指定されているようcname
に、対応するヘッダーの内容と同じでなければなりません。name.h
包含。ただし、C++ 標準ライブラリでは、宣言 (C でマクロとして定義されている名前を除く) は、名前空間の名前空間スコープ (3.3.6) 内にありますstd
。これらの名前が最初にグローバル名前空間スコープ内で宣言され、次にstd
明示的なusing 宣言(7.3.3) によって名前空間に挿入されるかどうかは指定されていません。