質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

813閲覧

名前空間(ネームスペース)について

kon_ta

総合スコア81

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/09/02 12:33

###質問内容

名前空間(ネームスペース)について質問です。
勉強している際に度々耳にするのですが、いまいち理解が出来ないので質問させて頂きます。

調べてみるとC++で、 関数や変数などの名前の衝突を避けるためのものです使われていたり、Linuxのネームスペースで調べてみると、リソースを区切るもの、といった説明があります。
これは要するにフォルダのようなものなのでしょうか?(フォルダを名前空間といっても間違いではないのでしょうか?)

どなたか知識のある方、回答宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

こんにちは。

ある意味名前空間って、名字みたいなものです。
狭い町内に太郎さんが3人いたら、山田太郎さん、鈴木太郎さん、佐藤太郎さんのように名前がかぶらないよう名字があると区別できるので便利ですよね。
この場合、山田namespace内に太郎さんがいて、鈴木namespace内にも太郎さんがいます。名前空間が異なるので、名前空間も一緒に指定すれば区別することができるって考え方です。
名字がなかったら、各太郎さんを区別できないので結構トラブルが起きそうです。

linuxの名前空間は使ったことがないので本当にこの意味なのかまでは分かりませんが、C++の名前空間の考え方は上記の通りです。

階層化フォルダも一種の名前空間です。
大昔、階層化ディレクトリがなかった時代はファイル名の付け方は頭痛かったですよ。プリフィックスをつけるなどしてファイル名が被らないように工夫してました。この場合のプリフィックスも一種の名前空間かも。

投稿2017/09/02 13:44

編集2017/09/02 13:49
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++における名前空間は仰る通りの意味です。ほとんどのサンプルプログラムで名前空間「std」というのものを使っていると思いますが、これがその一例です。

Linuxにおける名前空間は私も詳しくありませんが、調べてみたところ、同じような意味でした。ただ、フォルダという単位で区切るという表現が適切かはわかりません。ファイルというリソースに限定したものではないので。たとえば、ネットワークインタフェース(個別にIPアドレスをもつ)とかも分割できるらしいです。

投稿2017/09/02 14:15

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まあそう思ってもいいのですが、いくつか。

まあまず
namespaceの賢い使い方 - Qiita
を読んで下さい。

C++11で追加されたUDLsですが

cpp

1//in <string> header 2namespace std { 3 namespace literals { 4 namespace string_literals { 5 //C++14- 6 std::string operator "" s(const char *str, std::size_t len) { return { str, len }; } 7 } 8 using namespace ::std::literals::string_literals; 9 } 10 namespace string_literals { 11 ::std::literals::string_literals; 12 } 13}

のように User Defined Literalsが定義されているとき、

cpp

1#include <string> 2int main() 3{ 4 using namespace std::string_literals; 5 auto s = "arikitari"s;//std::string 6}

のように呼び出せるわけですが、UDLs同士が衝突しないように名前空間を深くするのが一般的です。

投稿2017/09/02 13:35

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「名前を切るためのフォルダのようなもの」、と考えても大きくは外れていません。

ただし、C++の場合は、ファイルと名前空間は全く別の世界です。1ファイルに複数の名前空間を作ろうが、逆に同じ名前空間に属するコードが別なフォルダに散っていても、一向に構いません。

これに対して、Javaは言語仕様で、名前空間に対応するフォルダにソースコードを入れることになっていますし、PHPなどで使われるオートローダーも、名前空間に対応するパスにファイルを置くことが前提となっています。

投稿2017/09/02 13:33

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問