この質問は、以前に何度も尋ねられているようですが、問題を回避するための答えがpoo-pooまたはpee-peeです。私は、この問題が解決された公式の文書と標準でソースを見つけたいと思っています。どうやら、 "std"は#includeに含まれるファイルに暗示されています。どこに明示的な "namespace std {...}"が存在せず、 "std"はキーワードのようなものですか?このキーワードの正式な定義を知りたい。私は、「STD」に含まれているか、何を知るために、明示的な「名前空間名」のマクロを除くC++の名前空間stdが定義されています(ドキュメント/標準へのリンク)
答えて
[内容]/2すべてのライブラリの実体との定期的な名前空間の定義によって覆われていないすべてのものをしたいです、
operator new
とoperator delete
はstd
または名前空間が名前空間std
内にネストされた名前空間内で定義されている...
いいえ、それはどのような方法で#include
によって暗示ていません。どうしてそう思う?
私はちょうど私のMinGW-W64(GCC)のセットアップでiostream
ファイルを開いて、簡単に
namespace std
ラインを見つけることができたました。
コンパイラがこの名前空間も明示的に定義しているとします。
stdがちょうど他のすべての他の名前空間として機能します。
namespace mynamespace {
struct test {};
}
mynamespace::test
Visual Studioを使用するときに定義があります
_STD_BEGIN // equal to namespace mynamespace {
struct IAmInNameSpaceStd {};
_STD_END // equal to }
あなたが所属するすべてのヘッダファイルで、そのような何かを見つけるでしょうSTL。 VS 2013で
定義がファイルに書き込まれyvals.h 523から524:
#define _STD_BEGIN namespace std {
#define _STD_END }
あなたはたとえば開く場合は、どちらか今見つけるのiostream:
_STD_BEGIN
または
namespace std {
または他のコンパイラとは別のものです。しかし、ある意味では、それはそこに書かれています。マジックは関係しません。
std名前空間全体が特定のソース/ヘッダーファイルで定義されていません。
名前空間は開いているので、追加することができます。
標準のC++ライブラリの各ヘッダーファイルは、特定のものをstd
名前空間に追加します。例えば
:
#include <vector> will add the vector's related bits.
名前空間stdが暗示されていません。
私のUbuntuで、私はディレクトリ
/usr/include/c++/5,
に行くと
grep --color -nH -e namespace *
200以上の出現が検出された実行することができます。クイックスキャン半分が宣言され、これらの最後の2つのファイルでの半分は、(ブロックの最後に)コメントしているお勧め:
utility:77:namespace std _GLIBCXX_VISIBILITY(default)
utility:268:} // namespace
valarray:44:namespace std _GLIBCXX_VISIBILITY(default)
valarray:87:} // namespace
valarray:92:namespace std _GLIBCXX_VISIBILITY(default)
valarray:585:} // namespace
valarray:594:namespace std _GLIBCXX_VISIBILITY(default)
valarray:1233:} // namespace
約10(サブ)ディレクトリは、このディレクトリにあります。私は何度か訪問している一つは、「ビット」このディレクトリはまた、約200 std名前空間の使用法、およびいくつかの他の名前空間を持ってい
/usr/include/c++/5/bits
は(STDないすなわち)です。
2つのgrepの取り組みでは、おそらく200個のstd名前空間への寄稿が見つかりました。名前空間stdは明らかに暗示されていません。
私は公式ドキュメントと、この問題が解決され 基準のソースを見つけたいです。
幸いです。
言語の作者は、何らかの形で、この名前空間の名前が何かの代わりに「標準」になることに同意したと思います...問題についての手紙や議事録がありますか?
- 1. std名前空間以外の標準機能の防止
- 2. 空の構造体はC++標準で定義されていますか?
- 3. 未定義C++での名前空間への参照
- 4. 名前空間におけるC++標準ベクトルの初期化
- 5. C#名前空間セパレータ(。)はどこかで定義されていますか?
- 6. ネストされたstdとposixの名前空間は未定義ですか?
- 7. 名前空間 '<グローバル名前空間>'には既に 'ワークフロー'の定義が含まれています
- 8. "名前空間接頭辞が定義されていません"実際に定義されています
- 9. コンテンツのプレフィックスメディアの名前空間が定義されていません
- 10. vuejs名前空間getters定義されていないエラー
- 11. C++名前(匿名)名前空間定義
- 12. 標準の名前空間にロードされるものは何ですか?
- 13. C標準でスタックオーバーフローの動作が定義されていますか?
- 14. エクスポート名前空間関数が定義されていません
- 15. C++グローバル名前空間のメンバーは既にエラーを定義しています
- 16. キャッチされていないにReferenceError:CoffeeScriptの中で名前空間をするとき、名前空間が定義されていない
- 17. CSS標準で関数が定義されていますか?
- 18. アクセス名前空間がXAMLで正確に定義されていない
- 19. Phalcon PHPマルチモジュール名前空間の定義
- 20. 名前空間のメンバー定義
- 21. :未定義のCLR名前空間
- 22. haskellに標準モジュール/名前空間の命名規則はありますか?
- 23. 名前空間がインポートされていないにもかかわらず定義されています
- 24. ターゲット名前空間が定義されているときにXMLにxslをリンクできない
- 25. 名前空間で定義されたクラスファイルの使用方法
- 26. 名前空間に定義された関数のオーバーロード
- 27. 名前空間「標準」とは何ですか?
- 28. マイクロソフトコーディング標準/ベストプラクティスのドキュメントにリンクしていますか?
- 29. 名前マングリングが標準化されていない理由
- 30. エラー:名前空間の「スレッド」「STD」のタイプ
"*明らかに、" std "は#includeに含まれるファイルによって暗示されています。*"うーん、そうではありません。なぜそう思うの?それらの包含物の結果によって宣言される。それはまったく暗示されていません。 –
明示的な "名前空間名" *を持つ通常の名前空間の定義でカバーされていないものはどれも* "存在するはずです。 – MikeMB
ある意味、正しいかもしれません。標準では、標準のライブラリヘッダーはまったく必要ありません(標準で言及されているすべての宣言と定義は、すべてコンパイラによって本質的に提供される可能性があります)。その場合、明示的な 'namespace std'は存在しませんが、実装は依然として動作する必要があります。 – MikeMB