5

<cmath>またはのような C から継承された関数を使用する場合、<cstdlib>それらを標準の名前空間の一部として修飾する必要がありますstd::logか、それとも C スコープにとどまってグローバル関数として使用する必要がありますか? どうsize_tですか?

4

1 に答える 1

16

たとえば、使用する場合<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) によって名前空間に挿入されるかどうかは指定されていません。

于 2012-02-05T12:51:46.820 に答える