2016-07-25 2 views
0

私は現在、自分の名前空間を含むより複雑なC++プログラムを構築しています。もちろん、私はいくつかの輸入品を使用しています。私が奇妙であることがわかったのは、その機能が、例えば、標準の名前空間にロードされるものは何ですか?

#include <math.h> 

はCOS関数はmath.h.の一部であるワークスペース

a = cos(b) 

内でアクセスすることができます一方、例えば、

#include <fstream> 

std::ifstream 

または類似介しaccesedされなければなりません。私はこれを理解したいと思います。

+0

私は答えに同意します。 「これと一緒に暮らすことができない」と言うと、 'namespace math {#include }'と言うかもしれません。これはCヘッダーで動作しますが、通常はC++ヘッダーでは動作しません。 – lorro

+0

私は重複したものに同意します。私はこの接頭辞のことを認識していなかったので、私はhaventそれを探しました – Glostas

答えて

4

C++標準ライブラリにはCライブラリのほとんどが含まれています(Cライブラリのオプション部分には曖昧な部分があります)。

Cには名前空間の概念がないため、Cライブラリに含まれるものはすべてグローバル名前空間に含まれます。 <math.h>はCヘッダーなので、その関数はグローバル名前空間に入れられます。

<fstream>ヘッダーを含めると、C++標準ライブラリからすべてのものがstd::ifstreamのようなstd::名前空間になります。

ここで楽しくなるのはエイリアスです。一例として、<math.h><cmath>として含めることができます。この背後にある考え方は、グローバルな名前空間(<math.h>を含む)またはstd::の名前空間(<cmath>を含む)にCシンボルを追加するかどうかを選択するという考え方でしたが、これはうまくいかなかったし、すなわち<cmath>)、両方を取得します。

一般に、ヘッダーが<foo.h>または<cfoo>を介して含まれる場合、そのヘッダーはCヘッダーに含まれます。 C++の標準ライブラリヘッダーにはこれらのエイリアスがありません(一部のプラットフォームではまだ明らかに依然として存在するiostream.hのような非標準的なものに対処する必要がある場合を除く)。

関連する問題