C++ 名称解析

标签 c++ namespaces using

我有点想知道 namespaceusing在 C++ 中,基本上我想知道差异并找出如何以最佳方式使用它。

在我看来,有(至少)三种方法来解析类名,但我不确定如何从中选择:

  1. using namespace <namespace>
  2. using <namespace>::<what_to_use>
  3. <namespace>::<what_to_use> <use_it>

我想知道优势,特别是如果以一种或另一种方式涉及性能,如果它只是语法和偏好问题,或者是否还有其他我没有考虑过的事情。

最佳答案

首先是 using namespace directive ,它将指定命名空间中的所有符号名称带入您当前的命名空间,无论您是否需要/使用它们。当然不受欢迎。

第二个是 using namespace declaration 。它只会在您当前的命名空间中带来指定的符号名称。优点是您不必每次都键入完全限定名称。

第三个是符号的完全限定名称。缺点是您必须在使用该符号的任何地方键入完全限定名称。

显然,Second 和 Third 是更合适的。它们中的任何一个都没有性能差异。唯一的区别是您输入的字符数量。只需根据您的编码标准指定的内容进行选择。

编辑:
正如@Jerry 指出的那样,将声明与 ADL(参数相关查找)结合使用可能会导致不良影响。
你可以在我的一个答案中找到详细的解释:

Detailed explanation on how Koenig lookup works with namespaces and why its a good thing?

在该部分下,
为什么对Koenig算法的批评?

关于C++ 名称解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14136720/

相关文章:

php - Laravel 4 未找到类和命名空间

c++ - C++中具有构造函数的模板化typedef结构

java - 使用java代码关闭浏览器窗口

C# 灵活/动态 USING 进行发布

c# - 将 construct 关键字添加到方法时有什么作用?

c++ - 无法将参数 'char*(*)[6]' 的 'char***' 转换为 '2' 到 'void prac(int*,char***)'

c++ - 无法访问 CreateDirectory 创建的目录

c++ - 当一个函数有一个特定大小的数组参数时,为什么它被替换为一个指针?

c# - 在 View 中找不到命名空间,在 Controller 中工作

c++ - 只有静态方法的类比命名空间更可取吗?