正确的方法使用namespace指令在C ++ [关闭]

问题描述 投票:4回答:1

在各种权威渠道我看到各种各样的方式来使用命名空间。 C ++标准不注重正确使用命名空间。

假设我们有如下代码:

example.h文件

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

这里有2种方式执行:

example1.cpp

#include "example.h"

using namespace Example;

MyClass::MyClass();

example2.cpp

#include "example.h"

namespace Example
{
    MyClass::MyClass();
}

这两种实施方式编译而不GCC警告,因此,它是相当的代码的纯度或美容的问题。但无论如何,什么是这两种方法的优点和缺点?

c++
1个回答
1
投票

这两个例子是不一样的:

第(using namespace Example;)将让编译器看到所有使用的命名空间,因为它是在当前的命名空间。 (意味着你不需要指定命名空间,除非有歧义与其他命名空间)

第二(namespace Example {...})将符号和代码添加到该命名空间。但是从空间外面也不会被视为是在当前的命名空间。

  • 你并不需要声明using当前的命名空间。
  • 一个块可以只在一个单一的命名空间,但是可以使用多个名称空间。

例如:

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

  }
}

main你有两个选择:

命名空间呼叫

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

或添加using和呼叫没有命名空间。

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

但是你不能添加到主命名空间,因为它不会被编译器发现:

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

将导致错误:

未定义的参考`主

© www.soinside.com 2019 - 2024. All rights reserved.