🎉

C++ 名前空間とは

2021/07/02に公開1

名前空間とは

名前空間は識別子の住所。名前の衝突を避けるために使われます。

namespace name {
...
}

以下のように、スコープ解決演算子を用いて指定します。

name::member;

スコープ解決演算子を使用した書き方

#include <iostream>

namespace hello {
	void print() {
		std::cout << "hello world\n" << std::endl;
	}
}

int main() {
	hello::print();
}

usingディレクティブ

以下で、呼び出したスコープにおいて名前空間にあるすべてのものをスコープに挿入できます。

using namespace name;

usingディレクティブを使用した書き方

#include <iostream>

namespace hello {
	using namespace std;
	void print() {
		cout << "hello world\n" << endl;
	}
}

int main() {
	hello::print();
}

usingディレクティブをスコープの外で使用した書き方

以下でも動きます。スコープの外でusingされているstdをhelloは使用することができます。

#include <iostream>

using namespace std;

namespace hello {
	void print() {
		cout << "hello world\n" << endl;
	}
}

int main() {
	hello::print();
}

using宣言を使用した書き方

using宣言を使用することで、特定のメンバを取り込むことができます。

#include <iostream>

namespace hello {
	using std::cout;
	using std::endl;
	void print() {
		cout << "hello world\n" << endl;
	}
}

int main() {
	hello::print();
}

参考

c++ using使い方の名称まとめ - Qiita
名前空間 (C++) | Microsoft Docs
C++ 関数やクラスを個別にusingする方法【using宣言、エイリアス宣言】 | MaryCore
名前空間

Discussion

yumetodoyumetodo
namespace inferior {
    namespace foo {
        namesapcce bar {
        }
    }
    namespace bar = foo::bar;
}

みたいなのも使われますね、STLだとstd::ranges::viewsstd::viewsになってたりstd::literals::string_literalsstd::string_literalsになったりしますね