C++ 项目相关知识命名空间
命名空间一般是对全局变量,函数,类做处理的,以防多个重名变量引起的重定义错误。命名空间主要分为三种
你指定了一个名字为A的命名空间。这种命名空间具有外部链接属性,也就是说这个空间里的变量和函数会和其他文件同一名字的命名空间一起链接。
在同一个项目里,test1.cpp的内容为
把main.cpp内容为
编译链接的时候就会报错
重定义错误,因为在同一个命名空间里有多个同名变量分配了不同空间地址,a在test1.cpp里分配了空间,也在main.cpp里分配了空间。链接器不知道哪个空间才是该变量的正确地址。
所以不能在多个文件的同一个命名空间里定义同名变量,只能在其中一个文件定义,而别的文件里声明引用,对这两个文件进行如下修改
test1.cpp内容改成
main.cpp内容改成
结果是
使用另外一个cpp里命名空间里的变量的方法
test1.cpp里内容如下
main.cpp里内容如下
输出结果为
另一个"main.cpp"
运行结果如下
输出结果
你可以省略命名空间的名字,则该空间的所有变量只能被当前文件所引用,而不能被同一个项目里别的文件使用。这些变量具有internal链接属性,这和声明为static的全局名称的链接属性是相同的,即名称的作用域被限制在当前文件中,无法通过在另外的文件中使用extern声明来进行链接。命名空间都是具有external 连接属性的,只是匿名的命名空间产生的 UNIQUE_NAME 在别的文件中无法得到,这个唯一的名字是不可见的。