2013-03-02 66 views
1

我只是浏览一个C++代码,我注意到了一些东西。在源文件中main.cpp调用没有命名空间的方法

std::cout << converter(); 

然后我查找了转换器的定义。没有名称空间和类名称。然后我在tool.cpp中看到

using namespace Ccon::converter; 

该定义位于Ccon.cpp文件中。

为什么main.cpp可以调用converter()

请指教。

感谢

+1

搜索“依赖于参数的查找”。 – jrok 2013-03-02 08:13:10

+2

阅读一本关于C++的好书是我的建议 – 2013-03-02 08:13:41

+0

在互联网上搜索'using namespace C++'是我的建议。 – antonijn 2013-03-02 08:19:27

回答

-2

请参阅此链接参数相关的名称查找:http://en.wikipedia.org/wiki/Argument-dependent_name_lookup

当编译器是无法找到一个不合格converter()它会寻找可用的命名空间,如果使用它们的名称和签名火柴。

在这种情况下,main.cpp包含了我设想的Ccon.h头文件,它定义了这个名称空间,因此它查找带有void参数的converter()

+1

这是否适用于此?转换器没有参数? – 2013-03-02 08:35:13

+0

你解释依赖于参数的查找的方式,它与参数无关。事实上,如果这是真的,命名空间不会有任何意义。 – jogojapan 2013-03-02 08:43:45

+0

我提到了函数签名中的签名,函数的名字,加上输入参数的类型和输出类型。没有任何论据会是签名。是的,jogojapan,如果你阅读http://en.wikipedia.org/wiki/Argument-dependent_name_lookup#Criticism,它谈到命名空间变得不太严格,因为ADL,这是对ADL的批评 – ruben2020 2013-03-02 10:53:48