在C中使用命名空间指令的正确方法

在各种权威来源中,我看到了使用命名空间的各种方法.

C标准没有关注命名空间的正确使用.

假设我们有以下代码:

example.h文件

namespace Example {
    class MyClass
    {
    public:
        MyClass();
    } 
}

以下是两种实施方式:

example1.cpp

#include "example.h"

using namespace Example;

MyClass::MyClass();

example2.cpp

#include "example.h"

namespace Example
{
    MyClass::MyClass();
}

两个实现都在gcc中编译时没有警告,因此,它是代码纯度或美观的问题.但无论如何,这两种方法的优点和缺点是什么?

最佳答案 这两个例子不一样:

第一个(使用命名空间Example;)将让编译器看到当前命名空间中所有使用的命名空间. (意味着除非与其他命名空间存在歧义,否则不需要指定命名空间)

第二个(名称空间示例{…})将向命名空间添加符号和代码.但是从名称空间外部看,它不会被视为当前名称空间中的名称空间.

>您无需为当前命名空间声明使用.
>一个块只能在一个命名空间中,但可以使用多个命名空间.

例如:

//consider the following namespace
Namespace A
{
  void f()
  {

  }
}

从主要你有两个选择:

调用命名空间

int main()
{
  A::f();
  ...
}

或添加使用和调用没有命名空间.

using namespace A;
int main()
{
  f();
  ...
}

但是你不能将main添加到命名空间中,因为编译器找不到它:

namespace A {
  int main()
  {
    f();
    ...
  }
}

会导致错误:

undefined reference to `main’

点赞