在C++中使用完全限定名称
Using fully qualified names in C++
我是一个C++新手,在处理一个需要它的项目时,我试图并行学习该语言。我使用一个相当流行和稳定的开源库来完成很多繁重的工作。通过阅读该库的源代码、教程和代码示例,我注意到它们在声明类型时总是使用完全限定的名称,这通常会导致非常的长而冗长的行中有很多:s。这被认为是C++中的最佳实践吗?有什么不同的方法来处理这个问题吗?
他们可能发现这比回答那些尝试示例代码但发现它不起作用的人的许多问题更容易,因为他们没有"使用"所涉及的命名空间。
实践各不相同——如果你正在处理一个有很多不同库和名称冲突的大型项目,你可能希望主动地一致使用更多的命名空间限定符,这样在添加新代码时,你就不必让旧代码更明确地说明它要使用什么。
从风格上讲,有些人更喜欢确切地知道所指的是什么,这可能意味着必须挖掘或遵循IDE的"转到声明"功能(如果可用),而另一些人则喜欢简洁,只在对未包含的名称空间的"特殊"引用上看到更全面的名称空间限定,这是一个更上下文的视角。
避免在头文件中使用"using namespace xxx;"也是正常的,因为包括该头的客户端代码将无法关闭它,并且该名称空间的内容将永久转储到其默认的"搜索空间"中。所以,如果你在头中查看代码,这也是它们可能更明确的原因之一。与此相反,您可以在函数体等作用域中使用"using-namespace",即使是在标头中,它也不会影响其他代码。更正常的做法是使用实现文件中的命名空间,您希望该文件是翻译单元中的最终文件,编译到将链接到最终可执行文件中的库或对象,或者可能是自己创建可执行文件的翻译单元。
第一种类型定义:
typedef std::vector<MyTypeWithLongName>::const_iterator MyTypeIt;
//use MyTypeIt from now on
第二次"使用"
using std::string;
//use string instead of std::string from now on
第三个"使用命名空间"
using namespace std;
//Use all things from std-namespace without std:: in front (string, vector, sort etc.)
最佳做法是:不要经常使用"using"answers"using namespace"。当您必须使用它(有时使代码更干净)时,不要将它放在头中,而是放在.cpp文件中。如果名称太长,或者我必须在同一个文件中大量使用类型,我倾向于使用上面的其中一个。
如果你正在编写自己的库,你肯定会大量使用名称空间,在你的核心应用程序中,应该会有更少的使用。至于做std::string
之类的事情,而不是从using namespace std;
imo开始,第一个版本更好,因为它更具描述性,不太容易出错
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 预处理器:插入结构名称中的前一个行号
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 基类中的函数名称解析
- 模板元程序查找相似的连续类型名称
- 没有名称的C++模板参数
- C++中名称篡改的目的是什么
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 如何仅使用对象名称打印特定于对象的成员
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 为什么 Clang 不允许"and"作为函数名称?
- 遮罩结构名称
- c++binary_search函数排序数组(流行名称搜索)出现问题
- RegGetValue在当前用户下找不到名称
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- C++中名称查找和名称绑定之间的区别
- 在C++中具有名称绑定的EDSL