namespaceを複数ソースで使用するとき – プログラミング – Home

namespaceを複数ソースで使用す...
 
通知
すべてクリア

[解決済] namespaceを複数ソースで使用するとき


Force
 Force
(@Force)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

はじめまして。
C++のnamespaceについて質問があります。

最近C++をはじめ、入門書を読みつつプログラムを
組んでいるのですが、しばしば

using namespace std;

という記述が出てきます。
入門書だとこれはソースファイル(A.cpp)に書かれているのですが、
A.cppと同じプロジェクトに別のソースファイル(B.cpp)があり、
上記の名前空間stdの関数をB.cppで使用したい場合は
どうすればいいのでしょうか。
単純にB.cppの中にも

using namespace std;

という記述を足してあげればいいのでしょうか。

分かりにくい質問で申し訳ありませんが
教えていただけないでしょうか。

環境はWindowsXP Professional VC6 SP6 です。
MFCは使用していません。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

YES.


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

>単純にB.cppの中にも
>using namespace std;
>という記述を足してあげればいいのでしょうか。
これでかまいません。

共通ヘッダに書く手もありますが、それが本当に内部用のヘッダでないならば、
あまりお勧めはしません。
(せっかくnamespaceを分けたのに、そんなことをするとまた衝突の可能性が増える…


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

本来は、各々にきちんとstd::と付けるべき所を毎回つけるのは面倒なので
usingを使って楽しているという所だと思います。
なので、必ずしなくてはいけないと言うわけではないと思います。
書く方が面倒で無いなら毎回、クラス名等の前にstd::を付ければいいだけです。
私は最初の頃はなるべくusing namespaceは使わないようにしていました。
どのクラスや定数がどのnamespaceに入っているかを把握出来た方が良いかなと
思っていましたので。

Banさんも書かれていますが、本来はクラス名等の衝突を避ける為に
わざわざnamespaceを使用しているわけですからusingの乱発は避けた方がよいと
思いますよ。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

専門学校で C を習った時は、「まず一番最初に #include <stdio.h> を書く。これはお
まじないのようなもの」と言われました(独学で、おまじないではないのは知っていま
したが)。
同じように、C++ では「using namespace std;」が「おまじないのようなもの」として
扱われることが多いかと思われます。
が、ある程度慣れてきたら、ちゃんと意味を理解して、使うべきところと使うべきでな
いところを考えたほうがよいでしょう。


返信引用
Force
 Force
(@Force)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

みなさま、回答ありがとうございます。

初歩的な手段としてはソースファイルに
using namespace std;
を記述してもよいが、実際には使うべき場所と
使わなくてもよい場所がある、ということでいいのでしょうか。

ちなみに小さなプロジェクトを作って
using namespace std;
を追加せずにstd::で全て書く方法でも
ちゃんとプログラムが動くことを確認しました。
名前空間を宣言しなくても書けるんですね。
勉強になりました。

どうもありがとうございました。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 実際には使うべき場所と
> 使わなくてもよい場所がある、ということでいいのでしょうか。

逆かなと。
使ってもよい場所と、使うべきでない場所がある、じゃないかな。
使わなくてもよい場所っていうと、全部だし。

> 名前空間を宣言しなくても書けるんですね。

using namespace は名前空間の宣言じゃありません。
正しくは何と呼ぶのかは忘れましたが、std 名前空間の宣言は、STL のヘッダファイル
中で行われています。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

using namespaceは、これから使うクラスや定数は特に指定していなければ、
このnamespaceのものを使いますよという意味だったと思います。
特に指定しなければというのが味噌です。
using namespaceは、毎回std::と書けばよいところを楽する為のものです。
なので無くても一向に構いません。
(というか知らなくても毎回std::と書けば良い話なので支障は無いと思います)

まあ、乱暴に言ってしまうと「めんどくさがりや用の機能」かなと。

意味合いは知っておくべきだけど、自分で使う必然は無いと思います。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

蛇足。

> using namespace は名前空間の宣言じゃありません。
> 正しくは何と呼ぶのかは忘れましたが、std 名前空間の宣言は、
> STL のヘッダファイル中で行われています。

using namespace std; は規格上「using directive」ですね。

類似機能(同一ではない)に「using declaration」というのあったりしますが、
ex. using std::cin; みたいな奴

namespace difinitionはあれど、namespace自体の宣言のみという構文は特にないです。

# ソレはソレとして、C++ の name lookup は微妙…。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました