我只是浏览一个C++代码,我注意到了一些东西。在源文件中main.cpp调用没有命名空间的方法
std::cout << converter();
然后我查找了转换器的定义。没有名称空间和类名称。然后我在tool.cpp中看到
using namespace Ccon::converter;
该定义位于Ccon.cpp文件中。
为什么main.cpp可以调用converter()
?
请指教。
感谢
我只是浏览一个C++代码,我注意到了一些东西。在源文件中main.cpp调用没有命名空间的方法
std::cout << converter();
然后我查找了转换器的定义。没有名称空间和类名称。然后我在tool.cpp中看到
using namespace Ccon::converter;
该定义位于Ccon.cpp文件中。
为什么main.cpp可以调用converter()
?
请指教。
感谢
请参阅此链接参数相关的名称查找:http://en.wikipedia.org/wiki/Argument-dependent_name_lookup
当编译器是无法找到一个不合格converter()
它会寻找可用的命名空间,如果使用它们的名称和签名火柴。
在这种情况下,main.cpp包含了我设想的Ccon.h头文件,它定义了这个名称空间,因此它查找带有void参数的converter()
。
这是否适用于此?转换器没有参数? – 2013-03-02 08:35:13
你解释依赖于参数的查找的方式,它与参数无关。事实上,如果这是真的,命名空间不会有任何意义。 – jogojapan 2013-03-02 08:43:45
我提到了函数签名中的签名,函数的名字,加上输入参数的类型和输出类型。没有任何论据会是签名。是的,jogojapan,如果你阅读http://en.wikipedia.org/wiki/Argument-dependent_name_lookup#Criticism,它谈到命名空间变得不太严格,因为ADL,这是对ADL的批评 – ruben2020 2013-03-02 10:53:48
搜索“依赖于参数的查找”。 – jrok 2013-03-02 08:13:10
阅读一本关于C++的好书是我的建议 – 2013-03-02 08:13:41
在互联网上搜索'using namespace C++'是我的建议。 – antonijn 2013-03-02 08:19:27