命名空间
命名空间(namespace) 可以帮助我们区分不同库中相同名称的函数, 类, 变量等. 使用了命名空间即定义了上下文. 命名空间就是定义了一个范围.定义了一个库的索引。使用时只需要引用不同的库,以便展开库中的函数,类等。防止命名污染。
例如,C++标准库。为了解决 C++ 标准库中的标识符与程序中的全局标识符之间以及不同库中的所有标识符之间的命名冲突. 标准 C++ 库的所有标识符都定义在一个名为 std 的命名空间中. 在程序中用到 C++ 标准库时, 使用 std 作为限定.防止应用程序中的命名和标准库冲突。
命名空间是 ANSI C++ 引入可以由用户命名的作用域, 用来处理程序中常见的同名冲突. 在 C++ 程序中, 有大量的变量, 函数和类名. 命名空间可以很好的解决相互的冲突。同时也更利于不同功能的分组。
QT_BEGIN_NAMESPACE
QT_BEGIN_NAMESPACE就是QT系统自己定义的宏。
QT_BEGIN_NAMESPACE是QT系统自己使用的命名空间预定义宏。也就是说以更快捷的方式定义QT自己的命名空间。关于命名空间可以参考C++的命名空间。这其实是指的同一种技术。当然我们也可以用相同方式定义一套宏。比如:MY_Begin_NAMESPACE等等。
//定义以下内容:
QT_BEGIN_NAMESPACE
class MyAction;
class MyMenu;
class MyPlainTextEdit;
QT_END_NAMESPACE
//在编译时就会变成这样:
namespace QT_NAMESPACE
{
class MyAction;
class MyMenu;
class MyPlainTextEdit;
}
///
//QT_NAMESPACE是Qt自己定义的命名空间
# define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
# define QT_END_NAMESPACE }
如果使用QT_BEGIN_NAMESPACE 声明,也就意味着我们把所有的声明体放进了QT命名空间。这样声明的东西更像是QT系统库的一部分一样。也许这样解释更容易理解。命名空间主要的任务就是防止命名污染,同时更容易对不同功能的程序分组。QT_BEGIN_NAMESPACE就是C++命名空间。