美文网首页C++ 杂记
C++ 名称空间(一些指导原则)

C++ 名称空间(一些指导原则)

作者: 赵者也 | 来源:发表于2017-07-10 08:30 被阅读6次

名称空间的一些指导原则:

  1. 使用在已命名的名称空间中声明的变量,而不是使用外部全局变量。
  2. 使用在已命名的名称空间中声明的变量,而不是使用静态全局变量。
  3. 如果开发了一个函数库或类库,将其放在一个名称空间中。事实上,C++ 当前提倡将标准函数库放在名称空间 std 中,这种做法扩展到了来自C语言中的函数。例如,头文件 math.h 是与 C 语言兼容的,没有使用名称空间,但 C++ 头文件 cmath 应将各种数学库函数放在名称空间std中。
  4. 仅将编译指令 using 作为一种将陈旧代码转换为使用名称空间的权宜之计。
  5. 不要在头文件中使用 using 编译指令。首先,这样做掩盖了要让哪些名称可用;另外,包含头文件的顺序可能影响程序的行为。如果非要使用 using 编译指令,应将其放在所有预处理器编译指令 #include 之后。
  6. 导入名称时,首选使用作用域解析操作符或 using 声明的方法。
  7. 对于using声明,首先将其作用域设置为局部而不是全局。

未命名的名称空间:

namespace
{
         int  zdsCool;
         int  zdsHot;
}

这就像后面跟着 using 编译指令一样,也就是说,在该名称空间中声明的名称的潜在作用域为:从声明开始点到声明区域末尾。从这方面看,它们与全局变量相似。不过,由于这种名称空间没有名称,因此不能显示的使用 using 编译指令或 using 声明来使它在其它位置都可用。具体地说,不能在未命名名称空间所属文件之外的其他文件中,使用该名称空间中的名称,因此该方法可替代链接性为内部的静态变量。实际上,C++ 标准不赞成在名称空间和全局作用域中使用关键字 static(该标准使用“不赞成”表明,这种做法,目前合法,但以后很可能将其视为非法)。例如,下面代码:

static int  nCount;

int fun1();

int main()
{
         …
}

int fun1()
{
         …
}

C++ 标准的意思是,程序员应该这样做:

namespace
{
         int  nCount;
}

int fun1();

int main()
{
         …
}

int fun1()
{
         …
}

相关文章

  • C++ 名称空间(一些指导原则)

    名称空间的一些指导原则: 使用在已命名的名称空间中声明的变量,而不是使用外部全局变量。 使用在已命名的名称空间中声...

  • C++名称空间namespace

    我们常常会见到这样的语句: 或者还有这样的: 这些其实就是使用了C++的名称空间技术。 什么是名称空间呢?名称空间...

  • C++名称空间(namespace)

    前言 当随着C++项目项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如,两个...

  • C++ 命名空间namespace

    本文转载自:C++ 命名空间namespace 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、...

  • 第九章 内存模型和名称空间(3)名称空间

    (三)名称空间 1.传统的c++的跟名称空间相关的概念。 声明区域(可以在其中进行声明的区域,局部变量就是在函数...

  • 2019-05-19命名空间

    C++命名空间 先看一段代码 上一段代码中第二句就是要将的重点,C++ Primer中称它为“名称空间”。他是C+...

  • C++ Day1 了解部分

    一. 1.1 命名空间 C++ 引入了新的概念,命名空间可以有效避免大型项目中的各种名称冲突 1.2 new 和 ...

  • C++ 何时使用引用参数(一些指导原则)

    使用引用参数的原因: 程序员能够修改调用函数中的数据对象 通过传递引用而不是整个数据对象,可以提高程序的运行速度。...

  • 名称空间

    引言 C 的全局性名称空间容易生成名称冲突的问题。想法1:名称属于编译单元,需要使用 extern 来公开。 失败...

  • 名称空间

    命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的...

网友评论

    本文标题:C++ 名称空间(一些指导原则)

    本文链接:https://www.haomeiwen.com/subject/nkcyhxtx.html