“使用命名空间”如何在C ++中工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“使用命名空间”如何在C ++中工作相关的知识,希望对你有一定的参考价值。

我试图理解C ++中的命名空间。我读到有两种方法可以访问命名空间变量和函数。第一个是使用::编写,第二个是使用顶部使用using指令而不是一次又一次地编写它。我意识到第一种方法更好,因为第二种方法可能导致冲突。

但是,我想知道第二种方法是如何工作的。例如,如果我在顶部写using namespace std,编译器如何知道它必须在开头添加std::以及它没有的那些函数。如果我在main中编写了一个函数,首先它将检查我的主文件中的函数,然后它将检查函数声明中的头文件(我在主文件顶部声明)。现在,根据我的理解,std中的函数在名称空间内声明。所以,如果我不使用::进行搜索,我就找不到它。

那么,std::何时会在函数开头添加?

答案

(这是简化的,但它是它的一般要点。)

当您编写std::bar时,编译器不会查找名为“std :: bar”的内容,它会在“std”命名空间中查找名为“bar”的内容。

using namespace std;使编译器在当前命名空间和std中查找名称,因此它不需要在任何地方添加“std ::”以查找“std :: bar” - 它将通过查找“找到” bar“在std内部以及当前名称空间中。

另一答案

以下是对其工作原理的描述的链接:http://en.cppreference.com/w/cpp/language/unqualified_lookup。更一般的概述从这里开始(http://en.cppreference.com/w/cpp/language/lookup),并向您展示具有限定名称与非限定名称的所有情况。

请注意,C ++中的名称解析实际上非常复杂。查询依赖查找(ADL)http://en.cppreference.com/w/cpp/language/adl也可以在查找函数声明的位置时应用。

此外,编译器可能需要执行重载解析,因为可能存在多个函数但具有不同数量的参数,并且这些重载可能存在于不同的命名空间中。

以上是关于“使用命名空间”如何在C ++中工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让 tcsetpgrp() 在 C 中工作?

如何在 C 代码中使用 UTF-8?

回溯如何在 Python 中工作

如何使 Python.h 文件在 Ubuntu 中工作?

pad_packed_sequence 如何在 pytorch 中工作?

&符号(&)符号如何在c ++中工作? [复制]