C ++如何知道在哪里查找使用"使用命名空间指定的命名空间..."?

时间:2016-05-13 14:15:04

标签: c++ opencv namespaces

例如,在使用OpenCV时,我们指定     using namespace cv; 但是C ++在哪里看不清楚它的定义?

2 个答案:

答案 0 :(得分:2)

using namespace不会使该命名空间中声明的所有内容都可见。它只会暴露翻译单元“看到”的内容。 请考虑以下代码

One.h

#pragma once
namespace ns
{
  void function1();
}

Two.h

#pramga once
namespace ns
{
  void function2();
}

的main.cpp

#include "Two.h" // <-- included only Two.h
using namespace ns;

int main()
{
  function2(); // <-- is a ns::function2() located in Two.h
  function1(); // <-- error compiler does not know where to search for the function
  return 0;
}

这里发生的是编译器创建的翻译单元,其中所有预处理器指令都已解析。它看起来像这样:

namespace ns
{
  void function2();
}
using namespace ns;

int main()
{
  function2(); // <-- OK. Declaration is visible
  function1(); // <-- Error. No declaration
  return 0;
}

答案 1 :(得分:1)

  

C ++如何知道在哪里查找使用using namespace …指定的命名空间?

它没有。

使用时

using namespace cv;

扩展了名称(类,函数,变量,枚举等)的搜索范围。除了通常搜索它们的其他范围外,还会在cv命名空间中搜索名称。