2017-01-08 3 views
-9

この質問は、以前に何度も尋ねられているようですが、問題を回避するための答えがpoo-pooまたはpee-peeです。私は、この問題が解決された公式の文書と標準でソースを見つけたいと思っています。どうやら、 "std"は#includeに含まれるファイルに暗示されています。どこに明示的な "namespace std {...}"が存在せず、 "std"はキーワードのようなものですか?このキーワードの正式な定義を知りたい。私は、「STD」に含まれているか、何を知るために、明示的な「名前空間名」のマクロを除くC++の名前空間stdが定義されています(ドキュメント/標準へのリンク)

+3

"*明らかに、" std "は#includeに含まれるファイルによって暗示されています。*"うーん、そうではありません。なぜそう思うの?それらの包含物の結果によって宣言される。それはまったく暗示されていません。 –

+2

明示的な "名前空間名" *を持つ通常の名前空間の定義でカバーされていないものはどれも* "存在するはずです。 – MikeMB

+2

ある意味、正しいかもしれません。標準では、標準のライブラリヘッダーはまったく必要ありません(標準で言及されているすべての宣言と定義は、すべてコンパイラによって本質的に提供される可能性があります)。その場合、明示的な 'namespace std'は存在しませんが、実装は依然として動作する必要があります。 – MikeMB

答えて

3

[内容]/2すべてのライブラリの実体との定期的な名前空間の定義によって覆われていないすべてのものをしたいです、operator newoperator deletestdまたは名前空間が名前空間std内にネストされた名前空間内で定義されている...

2

いいえ、それはどのような方法で#includeによって暗示ていません。どうしてそう思う?

私はちょうど私のMinGW-W64(GCC)のセットアップでiostreamファイルを開いて、簡単に

namespace std 

ラインを見つけることができたました。

コンパイラがこの名前空間も明示的に定義しているとします。

0

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 { 

または他のコンパイラとは別のものです。しかし、ある意味では、それはそこに書かれています。マジックは関係しません。

0

std名前空間全体が特定のソース/ヘッダーファイルで定義されていません。

名前空間は開いているので、追加することができます。

標準のC++ライブラリの各ヘッダーファイルは、特定のものをstd名前空間に追加します。例えば

#include <vector> will add the vector's related bits. 
0

名前空間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は明らかに暗示されていません。


私は公式ドキュメントと、この問題が解決され 基準のソースを見つけたいです。

幸いです。

言語の作者は、何らかの形で、この名前空間の名前が何かの代わりに「標準」になることに同意したと思います...問題についての手紙や議事録がありますか?

関連する問題