当前位置: 首页 > news >正文

汉口网站建设公司企业网站建设策划案

汉口网站建设公司,企业网站建设策划案,天圆地方建筑网站,盐城网站建设小程序公司概述 在C中,我们会使用变量、常量、函数、类、对象、结构体等各种元素。随着工程越来越庞大,代表这些元素的标识符冲突的概率也越来越大。为了解决标识符命名冲突的问题,C标准在1995年引入了关键字namespace,也叫做命名空间。使用…

概述

        在C++中,我们会使用变量、常量、函数、类、对象、结构体等各种元素。随着工程越来越庞大,代表这些元素的标识符冲突的概率也越来越大。为了解决标识符命名冲突的问题,C++标准在1995年引入了关键字namespace,也叫做命名空间。使用命名空间后,标识符会归属于不同的空间,即使重名了,一般情况下也不会发生冲突。

规则

        1、命名空间的定义比较简单,将需要放到命名空间内的元素置于"namespace 名称 {"和"}"之间即可。

namespace my_data
{int nData = 22;int Add(int a, int b){return a + b;}
}

        2、命名空间只能在全局范围内定义,不能在局部范围内定义。

int main()
{namespace my_data        // 编译出错{int nData = 22;}return 0;
}

        3、访问命名空间中的元素时,有三种方式:一是添加命名空间名称和作用域限定符,二是使用using namesapce将整个命名空间引入,三是使用using将命名空间中指定的元素引入(后续使用该元素时,就不用再添加命名空间和作用域限定符了)。

namespace my_data
{int nData = 22;
}using namespace my_data;
using my_data::nData;int main()
{printf("%d\n", my_data::nData);return 0;
}

        4、命名空间可以是匿名的,此时,命名空间中的元素只能在本文件中访问,外界访问不了,相当于给元素增加了static

namespace
{int nData = 22;
}int main()
{printf("%d\n", nData);return 0;
}

        5、命名空间可以嵌套,也就是在一个命名空间内,再定义另一个命名空间。

namespace my_data
{int nData = 22;namespace my_data2{int nData2 = 66;}
}int main()
{printf("%d, %d\n", my_data::nData, my_data::my_data2::nData2);return 0;
}

        6、可以给命名空间取别名,并使用这个别名访问命名空间。

namespace my_data
{int nData = 22;
}namespace my_data_alias = my_data;int main()
{printf("%d\n", my_data_alias::nData);return 0;
}

        7、允许存在多个相同名称的命名空间,编译器会自动将其合并到同一个命名空间中。

namespace my_data
{int nData = 22;
}namespace my_data
{int Add(int a, int b){return a + b;}
}

        8、命名空间中的函数,其定义可以放在命名空间内部,也可以放在命名空间外部。放在命名空间外部时,函数前面必须加上命名空间名的前缀。

namespace my_data
{int Add(int a, int b);class CBase{public: CBase();};
}int my_data::Add(int a, int b)
{return a + b;
}my_data::CBase::CBase()
{NULL;
}

        9、尽量不要在头文件中使用using语句,这相当于引入了命名空间内的元素。其他文件使用时,可能会导致命名冲突。

作用域

        1、不使用命名空间时,如果全局变量和局部变量同名,则局部变量将覆盖全局变量。

int nData = 66;int main()
{int nData = 88;printf("%d\n", nData);        // 输出:88return 0;
}

        在上面的示例代码中,输出的值为88。这是因为,局部变量nData和全局变量nData重名,局部变量自动覆盖了全局变量。如果想强制使用全局变量,则可以使用::nData的写法。可参看下面的示例代码。

int nData = 66;int main()
{int nData = 88;printf("%d\n", ::nData);        // 输出:66return 0;
}

        2、在全局范围内使用using语句,会在全局范围内引入命名空间中的元素。

namespace my_data
{int nData = 22;
}int nData = 66;using namespace my_data;    // 或者  using my_data::nData;int main()
{printf("%d\n", nData);    // 编译出错return 0;
}

        编译上述的示例代码时,会发生编译错误。这是因为在全局范围内使用using namespace my_datausing my_data::nData时,相当于在全局范围内又声明了一个nData,会与已有的全局变量nData冲突。再来看看下面的示例代码。

namespace my_data
{int nData = 22;
}using namespace my_data;    // 或者  using my_data::nData;int main()
{int nData = 66;printf("%d\n", nData);    // 输出:66return 0;
}

        此时不会有编译错误了,而是正常输出66,因为局部变量nData覆盖了using namespace my_datausing my_data::nData引入的全局变量nData

        3、在局部范围内使用"using 命名空间名::元素"语句,会在当前作用域范围内引入命名空间中指定的元素。

namespace my_data
{int nData = 22;
}int main()
{int nData = 66;if (true){using my_data::nData;printf("%d\n", nData);    // 输出:22}return 0;
}

        在上面的示例代码中,输出的值为22。这是因为在局部范围内使用using my_data::nData时,相当于在当前作用域if代码块内声明了一个临时变量nData,这个临时变量会覆盖main作用域下的临时变量nData,故最终输出22。再来看看下面的示例代码。

namespace my_data
{int nData = 22;
}int main()
{int nData = 66;using my_data::nData;printf("%d\n", nData);    // 编译错误return 0;
}

        我们把if代码块去掉了,这次会输出什么值呢?不会输出任何值,编译会发生错误。这是因为,我们在main作用域下使用了using my_data::nData,从而导致与相同作用域下声明的nData重名了。

        4、在局部范围内使用"using namespace 命名空间名"语句,会在当前作用域范围下将命名空间中所有的元素引入全局范围。

namespace my_data
{int nData = 22;
}int main()
{if (true){using namespace my_data;}printf("%d\n", nData);    // 编译错误return 0;
}

        上面的示例代码会发生编译错误,为什么呢?using namespace my_data已经将命名空间中所有的元素引入全局范围了,为什么在main作用域下访问不了nData呢?这是因为,using namespace my_data虽然将所有元素引入了全局范围,但只会在当前作用域范围下生效。再来看看下面的示例代码。

namespace my_data
{int nData = 22;
}int nData = 66;int main()
{if (true){using namespace my_data;printf("%d\n", nData);    // 编译错误}return 0;
}

        上面的示例代码仍然会发生编译错误,因为using namespace my_data将所有元素包括nData引入了全局范围,这与已经声明的全局变量nData冲突了。继续看下面的示例代码。

namespace my_data
{int nData = 22;
}int main()
{int nData = 66;if (true){using namespace my_data;printf("%d\n", nData);    // 输出:66}return 0;
}

        在上面的示例代码中,输出的值为66。using namespace my_data将所有元素包括nData引入了全局范围,但main中定义的局部变量nData会覆盖这个引入的同名的全局变量nData。再来看看下面的示例代码。

namespace my_data
{int nData = 22;
}int main()
{int nData = 66;using namespace my_data;printf("%d\n", nData);    // 输出:66return 0;
}

        我们把if代码块去掉了,仍会输出66。解释同上,这里就不再赘述了。

http://www.yayakq.cn/news/755936/

相关文章:

  • 恒美广告公司织梦网站需要优化
  • 男女做污视频网站关于网的设计创意作品
  • 外贸网站建站网络营销渠道的组成要素包括
  • 做网站除了有服务器还需要什么问题莱芜都市网人才网
  • 邢台中北世纪城网站兼职惠州网络推广公司
  • 中山做app网站公司吗做网站需要报备什么
  • 知名网站建设推荐怎么做网络推广最有效
  • 石家庄企业建站哪家好大连网站建设 意动科技
  • 外贸网站建设 公司价格网站建设一站式
  • 重庆响应式网站制作wordpress菜单排序
  • 繁昌网站建设建立网站的主要方式
  • 永济做网站单价定制做网站费用
  • 网站利于搜索深圳电子厂
  • 校园二级网站建设评比自评如何获取网站备案号
  • 对网站进行优化免费网络密码
  • 苏州做商城网站视频医疗平台网站开发
  • 菏泽市建设职工培训中心网站做外贸是否需要有自己的网站
  • 万网网站备案建设网站用什么语言开发稳定
  • 网站快速收录工具如何网站增加域名
  • 重庆企业官网建站快速搭建网站织梦如何让会员注册
  • cms做的电影网站什么是网站源码
  • 石家庄网站建设是什么意思自己做网站卖仿货
  • 交易网站建设需要学什么WordPress上下拖动效果
  • 郑州网站设计哪家公司好wordpress一个页面如何连接到首页
  • 吴江做招聘的网站wordpress 插件 破解版
  • 威海网站建设兼职合肥公司网站建设
  • 网站建设 淄博 兼职做黎川旅游网站的目的
  • 专门做985招聘信息的网站2022必火的创业项目
  • 北京seo排名优化网站wordpress中文伪原创
  • 淘宝二官方网站是做啥的百度对网站建设公司