C++ name space std名前空間とは?

std名前空間

C++言語では、stdと言う名前空間名があり、
そこでは、C++標準ライブラリ(クラスや関数、
マクロ、ストリーム、定数など)が定義されています。

つまり、C++標準ライブラリを使うには、
std::クラス名、関数名 等のように指定する必要があります。

標準ライブラリを使う度に std:: と付けるのは面倒なので、
通常、ファイルの先頭付近に
using namespace std; と指定してから使います。

usingキーワードについては、デフォルト名前空間 – using をご覧下さい。

C++からC言語の標準ライブラリ関数を使う際の注意点

C言語の標準ライブラリは、通常、名前空間に対応していませんが、
C++言語からも利用できるため、名前空間対応の書き方も可能です。

これには一定のルールがあります。

1点目は、インクルードしなければならないヘッダファイルを
名前空間対応版のヘッダ変更する事です。

例えば、printf関数を使用するためには、
stdio.hをインクルードしますが、
名前空間対応にしたい場合、cstdioをインクルードします。

stdio.h を cstdio に変えれば良い事になるので、
.hの部分を削除して、先頭にcを付ける。と言うルールになります。

2点目は簡単で、標準ライブラリ関数の前にstd::を付ければOKです。

例えば、std::printf(”C言語\n”); と言った感じになりますが、
通常、usingキーワードを使用しますので、std::表記は省略され、
printf(”C言語\n”);のように記述します。

スポンサーリンク

.hなしのヘッダファイルについて

C言語では、ヘッダファイルをインクルードする事がよくありますが、
これらのヘッダファイルは目に見える形でファイルとして存在します。

しかし、C++からは、
.hなしのヘッダファイルをインクルードする事があります。

例えば、<cstdio>ですが、
cstdioと言うヘッダファイルが存在しなくても良い。
と言う事になっています。

これは、入出力系の標準ライブラリ関数を使える準備をした。
と言う意味になります。

そして、ファイルとは限らないので、
ヘッダファイルではなく、ヘッダと呼びます。

ヘッダの名前空間非対応版

ストリームを使う際に用いる<iostream>ヘッダも
名前空間に対応してないバージョンがあり、
<iostream.h>と記述します。

こうすると、coutやcinオブジェクトは
std::と書く必要がなくなります。

標準的なC++記述

#include <iostream>

using namespace std;

void main(void) {

      cout << "C++言語入門\n";
}

名前空間に対応してないバージョン

#include <iostream.h>

void main(void) {

      cout << "C++言語入門\n";
}

ポイント:coutはグローバル空間に存在する。


結局、C言語式の標準ライブラリを使うのと、
C++から標準ライブラリを使うのは同じような記述になりますので、
常にプログラムの先頭に以下の2行を書いておけば、
std名前空間の事は頭から切り離してもいいのでは?
と言う感じになっています。

#include <iostream>

using namespace std;

いろいろ