Cpp module 00-ネーミングスペース(namespace)
12917 ワード
ネーミングスペース(namespace)
識別子の競合
識別(identifier)は、変数名、クラス、構造体、列挙型、関数、クラスメンバー関数、
typedef
名などを定義するために使用される.認識者がルールを定めることにより,同一範囲内で認識者を繰り返すことはできない.
some
の名前で変数を宣言した場合、関数またはタイプの名前として同じ名前は使用できません.番組規模の拡大と複数の作業に伴い、識別子の競合が発生する可能性が高い.そのため、言語面からより根本的な解決方法が必要です.これは、ネーミングスペースが必要な理由です.
ネーミング空間は識別者の記憶の領域であり,識別者が属する空間である.各空間領域を作成し、その領域に識別子をグループ化して配置すると、識別子の競合の可能性が大幅に減少します.
ネーミングスペースが異なる場合は、重複認識者でも問題ありません.ネーミングスペースを定義する基本フォーマットは次のとおりです.
namespace 네임스페이스 이름
{
변수나 함수 선언
}
ネーミングスペース名も識別子の一種であり、識別子を作成するルールに従って作成する必要があります.ネーミングスペースに属する識別子を参照する場合は、
::
演算子の前にネーミングスペースの名前を付けて、属することを示します.A::i
は、ネーミングスペースAに属するi
を意味する.ネーミングスペースが個別に定義されていなくても、グローバルネーミングスペースと呼ばれる常に存在するネーミングスペースがあります.もともと存在するため、他のネーミングスペース名はありません.
int i; // 전역 네임스페이스 소속
namespace A
{
int i; // A 소속
}
void func(void)
{
int i;
i = 1; // 지역변수 i
::i = 2; // 전역 네임스페이스 i
A::i = 3; // A 네임스페이스 i
}
int main(void)
{
func();
return (0);
}
ネーミングスペースを作成するルール
namesapce Game
{
namespace Graphic
{
struct Screen{};
}
namespace Sound
{
struct Sori {};
}
}
namespace A
{
double i;
}
namespace A
{
char name[32];
}
namespace
{
int internal;
}
ネームスペースの使用
ネーミングスペースに宣言された識別子を使用するには、そのたびにネーミングスペースを明記して参照するのが面倒です.
int main(void)
{
MYNS::value = 3;
MYNS::score = 1.2345;
MYNS::func();
return (0);
}
このような不便を解決する3つの方法が提供された.インジケータの使用(direction)
グローバル領域には使用インジケータがあり、その領域でMYNSが使用されていることを示します.以降のグローバル領域では、MYNSに属する識別子は
MYNS::
なしで使用される.インジケータの影響を使用する範囲は、インジケータが存在する領域に限定されます.
#include <iostream>
namespace MYNS
{
int value;
double score;
void func(void)
{
std::cout << "I am func" << std::endl;
}
}
using namespace MYNS;
int main(void)
{
value = 3;
score = 1.2345;
func();
return (0);
}
インジケータを使用すると、指定したネーミングスペース内のすべての識別子が取得されますが、宣言を使用して1つの識別子のみが取得されます.
使用宣言を持つブロックのみに影響します.
#include <iostream>
namespace MYNS
{
int value;
double score;
void func(void)
{
std::cout << "I am func" << std::endl;
}
}
int main(void)
{
using MYNS::value;
value = 3;
MYNS::score = 1.2345;
MYNS::func();
return (0);
}
void subfunc(void)
{
MYNS::value = 3;
}
別名ネーミングスペースは、競合を防止するために長い名前を提供します.名前が長すぎると、面倒になり、コードが乱れてしまいます.この場合、
namespace A = VeryVeryLongNameSpaceName;
のように短い別名を定義することができる.name space VeryVeryLongNameSpaceName
{
struct Person {};
}
int main(void)
{
namespace A = VeryVeryLongNameSpaceName;
A::Person P;
}
ソース
http://soen.kr/lecture/ccpp/cpp3/34-1-1.htm
http://soen.kr/lecture/ccpp/cpp3/34-1-2.htm
http://soen.kr/lecture/ccpp/cpp3/34-1-3.htm
Reference
この問題について(Cpp module 00-ネーミングスペース(namespace)), 我々は、より多くの情報をここで見つけました https://velog.io/@parksj3205/Cpp-module00テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol