当前位置:编程学习 > C/C++ >>

第17章 用于大型程序的工具(10)

17.2.4 命名空间成员的使用

除了在函数或其他作用域内部,头文件不应该包含using指示或using声明。在其顶级作用域包含using指示或using声明的头文件,具有将该名字注入包含该头文件的文件中的效果。头文件应该只定义作为其接口的一部分的名字,不要定义在其实现中使用的名字。

1. using声明,扼要重述

一个using声明一次只引入一个命名空间成员,它使得无论程序中使用哪些名字,都能够非常正确。

using std::vector; 
using std::string; 
using std::vector;
using std::string;2. using声明的作用域

using声明可以出现在全局作用域、局部作用域或者命名空间作用域中。类作用域中的using声明局限于被定义类的基类中定义的名字。

class Book{ 
protected: 
    virtual void Method1() throw(logic_error){} 
}; 
 
class NoteBook:private Book{ 
protected: 
    using Book::Method1; 
}; 
class Book{
protected:
 virtual void Method1() throw(logic_error){}
};

class NoteBook:private Book{
protected:
 using Book::Method1;
};3. 命名空间别名

命名空间别名声明以关键字namespace开头,接(较短的)命名空间别名名字,再接=,再接原来的命名空间名字和分号。如果原来的命名空间名字是未定义的,就会出错。

命名空间别名也可以引用嵌套的命名空间。

namespace vec=Anders::NameSpace1; 
vec::Class1 c1(); 
 namespace vec=Anders::NameSpace1;
 vec::Class1 c1();一个命名空间可以有许多别名,所有别名以及原来的命名空间名字都可以互换使用。

4. using指示

像using声明一样,using指示使我们能够使用命名空间名字的简写形式。与using声明不同,using指示无法控制使得哪些名字可见——它们都是可见的。

5. using指示的形式

using指示以关键字using开头,后接关键字namespace,再接命名空间名字。如果该名字不是已经定义的命名空间名字,就会出错。

using指示使得特定命名空间的所有名字可见,没有限制。短格式名字可从using指示点开始使用,直到出现using指示的作用域的末尾。

using namespace std; 
using namespace Anders::NameSpace2; 
using namespace std;
using namespace Anders::NameSpace2;6. using指示与作用域

using指示不声明空间成员名字的别名,相反,它具有将命名空间成员提升到包含命名空间本身和using指示的最近作用域的效果。

using指示有用的一种情况是,用在命名空间本身的实现文件中。

摘自 xufei96的专栏
 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,