在C ++中使用完全限定的名称
我是一名C ++新手,试图在需要它的项目上学习语言。 我正在使用一个相当流行和稳定的开源库来做很多繁重的工作。 通过阅读库的源代码,教程和代码示例,我注意到它们在声明类型时总是使用完全限定的名称,这往往会导致很长且冗长的行,其中包含很多::。 这被认为是C ++中的最佳实践吗? 有没有不同的方式来处理这个问题?
他们可能发现比回答试用示例代码的人提出的许多问题要容易一些,因为他们没有“使用”涉及的命名空间,因此发现它不起作用。
做法各不相同 - 如果您正在处理一个包含大量不同库和名称冲突的大型项目,那么您可能希望始终如一地使用更多名称空间限定符,以便在添加新代码时不必去更多旧代码明确说明它试图使用什么。
在风格上,有些人更喜欢准确地知道可能需要挖掘或遵循IDE“去声明”功能(如果可用)的内容,而其他人喜欢简洁并且只能在“特殊”参考中看到更完整的名称空间限定到尚未包含的名称空间 - 更具上下文的视角。
避免“使用namespace xxx;”也是正常的。 在头文件中,包含该头的客户端代码将无法将其关闭,并且该名称空间的内容将永久转储到其默认“搜索空间”中。 所以,如果你在头文件中查看代码,这可能是更明确的一个原因。 与此相比,你可以在一个范围内使用“命名空间”,如函数体 - 即使在头部 - 也不会影响其他代码。 在一个实现文件中使用一个名称空间更为正常:您希望这个文件是翻译单元中的最终文件,编译为一个库或对象,然后链接到最终的可执行文件,或者是一个自己创建的翻译单元可执行文件。
第一个typedefs:
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.)
最佳实践:不要使用'使用'和'使用命名空间'。 当你必须使用它(有时保持代码清洁)时,不要将它放在标题中,而是放在.cpp文件中。 如果名字变得很长,或者我必须在同一个文件中使用很多类型,我倾向于使用上述名称之一。
如果你正在编写自己的库,你肯定会大量使用名称空间,在你的核心应用程序中,应用程序的用途会更少。 至于做std::string
而不是using namespace std;
第一个版本更好,因为它更具描述性,不易出错