火狐 wordpress主题,湛江网站关键字优化,网址大全浏览器下载,wordpress底部音频文章目录 1. 为什么要有命名空间?2. 命名空间介绍3.命名空间三种使用方式4. 注意 1. 为什么要有命名空间? 在C语言中#xff0c;局部变量和全局变量如果同名#xff0c;在使用时可能会造成冲突。这并不是想避免就能避免的#xff0c;在程序中#xff0c;不仅仅是变量局部变量和全局变量如果同名在使用时可能会造成冲突。这并不是想避免就能避免的在程序中不仅仅是变量函数也大量存在所以存在许多命名冲突的问题。特别是一个项目如果由一个开发团队进行开发团队中存在多名开发成员这样的命名冲突问题就更多了。
#include stdio.hint val 10;int main() {int val 20;printf(%d\n, val);return 0;
}上面这段C代码在main()函数中不删除不注释掉局部变量val情况下如果就想要访问全局变量val这是无法做到的。这就是命名冲突引起的问题也导致C语言在这方面不够灵活。
2. 命名空间介绍 而C中使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。如何更好地理解这段话呢请看下面代码例子
#include stdio.h
#include stdlib.hint rand 10;int main() {printf(%d\n, rand);return 0;
}这段程序实际上无法运行就不说运行因为这甚至不能编译过去看报错信息就知道了 因为在C语言标准库stdlib.h中rand是一个函数这个例子就更明显是命名冲突引发的问题了不过这一个问题倒是可以解决就是把变量rand放在main()函数局部定义就可以使用了。虽然可以解决但不能否认存在这样一个问题。
这时就可以使用命名空间解决这个问题了当然这也只能是将C代码改成C才支持。
#include iostreamnamespace test {int rand 10;
}using namespace std;
using namespace test;int main() {cout test::rand endl;return 0;
}3.命名空间三种使用方式
命名空间 ::::是作用域限定符
#include iostreamnamespace test {int rand 10;
}int main() {std::cout test::rand std::endl;return 0;
}using 命名空间::成员
#include iostreamnamespace test {int rand 10;
}using std::cout;
using std::endl;
using test::rand;int main() {cout rand endl;return 0;
}using namespace 命名空间
#include iostreamnamespace test {int rand 10;
}using namespace std;int main() {cout test::rand endl;return 0;
}为什么有这几种用法呢对于某些情况需要指定命名空间否则编译器无法区分它究竟是指哪里的。比如下面的rand这里能看出来编译器将其当成了stdlib.h中的rand函数。 再看下面这种情况我引入了命名空间test这时就混淆了命名空间test中的rand和标准库中的rand所以还是得给rand指定一下test::rand或std::rand。
4. 注意 通过上面的介绍了解后命名空间确实可以解决命名空间问题当然前提是使用规范比如在多个命名空间中如果有一样名字的变量那么这几个命名空间的的名字不能一样这样不仅会造成重定义同时也完全打破了命名空间的用途了。另外在自定义命名空间中不仅仅只是定义变量也可以定义函数、宏等。