C++命名空间的使用

    技术2022-05-19  24

    对using namespace std;的解释:         所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。         由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:         1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:         std::cout << std::hex << 3.4 << std::endl;         2、使用using关键字。         using std::cout;         using std::endl;         以上程序可以写成         cout << std::hex << 3.4 << endl;         3、最方便的就是使用using namespace         std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:         cout << hex << 3.4 << endl;         这段程序用到了标准模板库,在屏幕上打印字符a~z,其中main函数的标记式只有两种是被         C++标准委员会接受的,只有以下两种写法是符合C++标准的,是可移植的。即:         int main()         {         }         和         int main(int argc, char* argv[]) 很多初学C++的人,对于C++中的一些基本的但又不常用的概念感到模糊,命名空间(namespace)就是这样一个概念。 C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决C++中的变量、函数的命名冲突而服务的。解决的办法就是将你的strTemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。 例如: #include <iostream> #include <string> using namespace std; //using namespace编译指示,使在C++标准类库中定义的名字在本程序中可以使用 //否则,iostream,string 等c++标准类就不可见了,编译就会出错。 //两个在不同命名空间中定义的名字相同的变量 namespace myown1{ string user_name = "myown1"; } namespace myown2{ string user_name = "myown2"; } int main() { cout<< "/n" << "Hello, " << myown1::user_name //用命名空间限制符myown1访问变量user_name << "... and goodbye!/n"; cout<< "/n" << "Hello, " << myown2::user_name //用命名空间限制符myown2访问变量user_name << "... and goodbye!/n"; return 0; } 当然,我们也可以使用程序开头的预编译指示来使用命名空间中的名字。使用预编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。以上主程序可修改为: int main() { using namespace myown1; cout<< "/n" << "Hello, " << user_name << "... and goodbye!/n"; // using namespace myown2; cout<< "/n" << "Hello, " << myown2::user_name //用命名空间限制符myown2访问变量user_name << "... and goodbye!/n"; return 0; } 但第二个变量必需用命名空间限制符来访问,因为此时myown1空间中的变量已经可见,如果不加限制,编译器就会无法识别是那一个命名空间中的变量。这一点一定要注意。 以上只是初学者不清楚的一个概念,在以后的文章中还将继续讨论其它的一些概念。 命名空间(名字空间)   命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。命名空间用关键字namespace 来定义: //stl_cpp_6.cpp #include <iostream> using namespace std; namespace printA {   print() {cout<<"using namespace printA….."<<endl; }; } namespace printB {   print() {cout<<"using namespace printB….."<<endl; }; } int main(void) {   printA::print();   //测试命名空间printA, ::是作用域解析运算符   printB::print(); } 命名空间可以嵌套定义: namespace A {   functiong1(){};   namespace B   { } }   一个namespace是指一个具名的范围(named scope)。namespace被用来将相关的声明划归在一起,将不相关的代码部分隔开。命名空间只是命名了一个特殊的作用域,当程序很大,而且需要多人合作的时候,命名空间就显得特别的重要。比如2个程序员A,B 在同一个程序中定义了函数 pop(),如果没有使用命名空间,则会出错,而且这种错误难以检测出来。为了安全起见,他们可以定义不同的命名空间 A和B,在用的时候可以使用A::pop()和B::pop()来区分。   在STL中,标准库的全部成员在预先定义的命名空间std中。如果要用类模板vector ,有两种方法:一是在程序的前面添加预处理指令:   #include <vector>   using namespace std; 第二种方法是:   #include <vector>   using std::vector;

    最新回复(0)