C++编程思想 第1卷 第10章 名字控制 名字空间 创建一个名字空间

虽然名字可以嵌套在类内,但全局函数、全局变量以及类的名字还是在同一
全局名字空间中。

可以用C++的名字空间namespace 特征,把一个全局名字空间分成多个可管理
的小空间。

namespace的目的是产生一个新的名字空间

创建一个名字空间与创建一个类非常相似

//: C10:MyLib.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
namespace MyLib {
  // Declarations
}
int main() {} ///:~

这就产生了一个新的名字空间,其中包含了各种声明

namespace与class、struct、union和enum的区别
namespace只能在全局范围内定义,但它们之间可以相互嵌套
namespace定义的结尾,右花括号的后面不必跟一个分号
可以按类的语法来定义一个namespace,定义的内容可在多个头文件中延续,
就好像重复定义这个namespace一样
 

//: C10:Header1.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#ifndef HEADER1_H
#define HEADER1_H
namespace MyLib {
  extern int x;
  void f();
  // ...
} 

#endif // HEADER1_H ///:~


//: C10:Header2.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#ifndef HEADER2_H
#define HEADER2_H
#include "Header1.h"
// Add more names to MyLib
namespace MyLib { // NOT a redefinition!
  extern int y;
  void g();
  // ...
} 

#endif // HEADER2_H ///:~


//: C10:Continuation.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include "Header2.h"
int main() {} ///:~

无输出

一个namespace的名字可以用另一个名字来作它的别名,这样就不必敲打那些
开发商提供的冗长的名字

//: C10:BobsSuperDuperLibrary.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
namespace BobsSuperDuperLibrary {
  class Widget { /* ... */ };
  class Poppit { /* ... */ };
  // ...
}
// Too much to type! I'll alias it:
namespace Bob = BobsSuperDuperLibrary;
int main() {} ///:~

不能像类那样去创建一个名字空间实例

无输出

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/81170284
今日推荐