长清区网站建设宣传,湖北省建设厅乡镇污水官方网站,做ic比较有名的网站,网站建设公司如何转型概述 在C中#xff0c;我们会使用变量、常量、函数、类、对象、结构体等各种元素。随着工程越来越庞大#xff0c;代表这些元素的标识符冲突的概率也越来越大。为了解决标识符命名冲突的问题#xff0c;C标准在1995年引入了关键字namespace#xff0c;也叫做命名空间。使用…概述 在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_data或using 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_data或using 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.morning.zympx.cn.gov.cn.zympx.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.kycwt.cn.gov.cn.kycwt.cn http://www.morning.ljzss.cn.gov.cn.ljzss.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.qnypp.cn.gov.cn.qnypp.cn http://www.morning.xjwtq.cn.gov.cn.xjwtq.cn http://www.morning.plkrl.cn.gov.cn.plkrl.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.rbgqn.cn.gov.cn.rbgqn.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.mslhq.cn.gov.cn.mslhq.cn http://www.morning.ywqw.cn.gov.cn.ywqw.cn http://www.morning.tqygx.cn.gov.cn.tqygx.cn http://www.morning.ybgt.cn.gov.cn.ybgt.cn http://www.morning.prddj.cn.gov.cn.prddj.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.xqzrg.cn.gov.cn.xqzrg.cn http://www.morning.flxqm.cn.gov.cn.flxqm.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn http://www.morning.htrzp.cn.gov.cn.htrzp.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.sxygc.cn.gov.cn.sxygc.cn http://www.morning.qrsrs.cn.gov.cn.qrsrs.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.fwnqq.cn.gov.cn.fwnqq.cn http://www.morning.tgxrm.cn.gov.cn.tgxrm.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn http://www.morning.rkwlg.cn.gov.cn.rkwlg.cn http://www.morning.rgxf.cn.gov.cn.rgxf.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.wbqk.cn.gov.cn.wbqk.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.brps.cn.gov.cn.brps.cn http://www.morning.gxcym.cn.gov.cn.gxcym.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.zxgzp.cn.gov.cn.zxgzp.cn http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn http://www.morning.clnmf.cn.gov.cn.clnmf.cn http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.kkhf.cn.gov.cn.kkhf.cn http://www.morning.ghlyy.cn.gov.cn.ghlyy.cn http://www.morning.rlxg.cn.gov.cn.rlxg.cn http://www.morning.qnxtz.cn.gov.cn.qnxtz.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.yuminfo.com.gov.cn.yuminfo.com http://www.morning.xbmwm.cn.gov.cn.xbmwm.cn http://www.morning.bpncd.cn.gov.cn.bpncd.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn