深圳网站建设黄浦网络-骗子,网站建设全,网站建设与维护的题目,wordpress安装服务器配置假设这样一种情况#xff0c;当一个班上有两个名叫 Zara 的学生时#xff0c;为了明确区分它们#xff0c;我们在使用名字之外#xff0c;不得不使用一些额外的信息#xff0c;比如他们的家庭住址#xff0c;或者他们父母的名字等等。同样的情况也出现在 C 应用程序中。例…假设这样一种情况当一个班上有两个名叫 Zara 的学生时为了明确区分它们我们在使用名字之外不得不使用一些额外的信息比如他们的家庭住址或者他们父母的名字等等。同样的情况也出现在 C 应用程序中。例如您可能会写一个名为 xyz() 的函数在另一个可用的库中也存在一个相同的函数 xyz()。这样编译器就无法判断您所使用的是哪一个 xyz() 函数。因此引入了命名空间这个概念专门用于解决上面的问题它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上命名空间就是定义了一个范围。关于命名空间内变量和函数及全局变量的使用和作用域:#include iostream
using namespace std;
namespace A
{int a 100;namespace B //嵌套一个命名空间B{int a 20;}
}int a 200;//定义一个全局变量int main(int argc, char *argv[])
{cout A::a A::a endl;cout A::B::a A::B::a endl;cout a a endl;cout ::a ::a endl;int a 30;cout a a endl;cout ::a ::a endl;return 0;
}结果A::a 100
A::B::a 20
a 200 //全局变量a
::a 200
a 30 //局部变量a
::a 200 即全局变量 a 表达为 ::a用于当有同名的局部变量时来区别两者。补充关于 using 的错误事例#include iostream
using namespace std;
namespace A
{int a 100;int fun(){couta aendl;}namespace B //嵌套一个命名空间B{int a 20;int fun(){couta aendl;}}
}int main(int argc, char *argv[])
{coutaendl;fun();return 0;
}这样会出错会显示 a 变量和 fun 函数 “was not declared in this scope”即找不到这个 a 和 fun 函数。解决办法 用 using 来告诉编译器用到的是哪个命名空间内的内容。在 main() 上面加 using namespace A; 或者 using namespace A::B; 。这样就可以使用其中的 a 和 fun()。但是不能同时使用因为这样也会导致编译出错编译器器不知道要去使用哪个 a 和 fun()。补充一个命名空间冲突的情况#include iostreamusing namespace std;
namespace A {int a 100;namespace B //嵌套一个命名空间B{int a 20;}
}int a 200;//定义一个全局变量int main(int argc, char *argv[]) {cout A::a A::a endl; //A::a 100cout A::B::a A::B::a endl; //A::B::a 20cout a a endl; //a 200cout ::a ::a endl; //::a 200using namespace A;cout a a endl; // Reference to a is ambiguous // 命名空间冲突编译期错误cout ::a ::a endl; //::a 200int a 30;cout a a endl; //a 30cout ::a ::a endl; //::a 200//即全局变量 a 表达为 ::a用于当有同名的局部变量时来区别两者。using namespace A;cout a a endl; // a 30 // 当有本地同名变量后优先使用本地冲突解除cout ::a ::a endl; //::a 200return 0;
}