最近在使用命名空间,想把命名空间总结下,现在只是简单的记录下使用的心得,后期会进行进一步的整理
1.就是我们是把我们的.cpp文件和.h文件都使用相同的命名空间,如果不这样做 ,会可能出现下列问题。
1.1 只在头文件中使用,那么要包含头文件,使用头文件里声明的类或者方法时,要using namespace ...
而在.cpp中没有使用 ,在连接的时候,会报链接错误。
1.2只在cpp中使用,那么包含头文件后,编译期不会报错,但是在链接期因为找不到实现也会报错。
所以是在.h和.cpp中同时使用。
2.命名空间的位置
无论是在.h还是在.cpp中,命名空间的位置一定是在,#include之后,进行使用,因为这样的话,才能保证原有的.h中的命名空间是完整的,如果你在#include之上,写了自己的空间,你相当于把头文件里外又增加了命名空间。
3.在一个工程下的多个文件里,一般我们使用同一个命名空间,同时如果一个工程下的命名空间相同,那么相互之间就是在一个大的命名空间下,就不用在using namespace ...了,但是这样也就不能避免你在不同文件之间的冲突了,没有起到命名空间该有的作用了,所以真正使用的时候,最好还是粒度小一点,最好是以文件为单位。
4. 匿名命名空间,为了不让其他文件对你的定义进行引用,通常我们会使用你匿名命名空间,直接使用namespace ,而不加名字,所以只有本文件可以进行使用。
5.命名空间虽然能解决名称冲突,但是不是百分百,如果你的命名空间冲突了,也会出问题
6.当 a文件里有命名空间 test::field1::a,而b文件在命名空间
test::field2::a,此时你引用命名空间a的内容时候,可以直接使用field1::a.