⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 effective c++ 2e item28.htm

📁 Effective-c++.国外很经典的一本关于c++编程的电子书。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.csdn.net/develop/article/8/8989.shtm -->
<HTML><HEAD><TITLE>Effective C++ 2e Item28</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content=0 http-equiv=Expires><LINK 
href="Effective C++ 2e Item28.files/news.css" rel=stylesheet>
<STYLE type=text/css>.fst {
	BACKGROUND: #eeeecc; BORDER-LEFT: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; PADDING-TOP: 0px; WIDTH: 770px
}
.fstdiv3 IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-RIGHT: #eeeecc 8px solid; BORDER-TOP: #eeeecc 6px solid
}
</STYLE>

<META content="MSHTML 5.00.2614.3500" name=GENERATOR></HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 
topMargin=0 marginheight="0" marginwidth="0">
<SCRIPT language=javascript1.2>
<!--
	var currentpos,timer; 
	function initialize() 
	{ 
	timer=setInterval('scrollwindow()',10);
	} 
	function sc(){
	clearInterval(timer);	
	}
	function scrollwindow() 
	{ 
	currentpos=document.body.scrollTop; 
	window.scroll(0,++currentpos); 
	if (currentpos != document.body.scrollTop) 
	sc();
	} 
	document.onmousedown=sc
	document.ondblclick=initialize
//-->
</SCRIPT>

<CENTER><LINK href="news.css" rel=stylesheet>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR vAlign=bottom>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/1.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/">CSDN主页</A></FONT></DIV></TD>
    <TD bgColor=#001880 height=22 width=185>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/2.gif" 
      width=70></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/y1.gif" 
      width=3></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/news/">新闻聚焦</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=center><FONT color=#ff6633><A 
      href="http://www.csdn.net/cnshare/">共享软件</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/buy/">俱乐部</A><IMG 
      src="http://www.csdn.net/images/buy.gif"></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/develop/"><FONT 
      color=red>开发文档</FONT></A></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://expert.csdn.net/">专家门诊</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/job/">招聘求职</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/linux/">Linux园地</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item28.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/magazine/">程序员杂志</A></DIV></TD>
    <TD height=22 width=11>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/j1.gif" 
      width=11></DIV></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 height=5 width=2></TD>
    <TD height=5 width=768></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 width=2></TD>
    <TD width=158><IMG border=0 
    src="http://www.csdn.net/images/csdn_logo.gif"></TD>
    <TD align=middle width=470>
      <OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 
      codeBase=http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0 
      height=60 id=Movie1 width=468><PARAM NAME="movie" VALUE="http://www.csdn.net/images/ad/magazine6_1.swf"><PARAM NAME="quality" VALUE="high">
      <EMBED src='http://www.csdn.net/images/ad/magazine6_1.swf' quality=high 
      WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' 
      PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'>
      </EMBED></OBJECT><IMG border=0 height=0 
      src="http://www.csdn.net/count/pageview.asp?name=cnshare" width=0> </TD>
    <TD align=right width=140>
      <SCRIPT>document.write("<img src=http://www.csdn.net/count/pageview.asp?name=develop border=0 width=0 height=0>");</SCRIPT>
      <A href="http://www.csdn.net/dev/"><IMG border=0 height=60 
      src="http://www.csdn.net/develop/images/kfzxt3.gif" width=120></A> 
  </TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 width=2></TD>
    <FORM action=http://www.csdn.net/member/logon.asp method=post target=_blank>
    <TD bgColor=#e0dedf vAlign=bottom width=340> 昵称:<INPUT class=from1 
      name=name size=10> 密码:<INPUT class=from1 name=pass size=10 
      type=password> <SELECT name=type size=1> <OPTION value=1>我的论坛</OPTION> 
        <OPTION value=2>我的软件</OPTION> <OPTION value=3>我的订单</OPTION> <OPTION 
        selected value=4>我的文档</OPTION> <OPTION value=5>我的简历</OPTION></SELECT></TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><INPUT height=17 
      src="http://www.csdn.net/images/denglu.gif" type=image width=44> </TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><A 
      href="http://www.csdn.net/expert/zc.asp" target=_parent><IMG border=0 
      src="http://www.csdn.net/images/zhuce.gif"></A> </TD></FORM>
    <FORM action=http://www.csdn.net/find.asp method=post target=_blank>
    <TD align=right bgColor=#e0dedf vAlign=bottom width=293><INPUT class=from1 
      name=search> <SELECT name=type size=1> <OPTION value=1>新闻</OPTION> 
        <OPTION value=2>软件</OPTION> <OPTION value=3>商品</OPTION> <OPTION selected 
        value=4>文档</OPTION> <OPTION value=5>论坛</OPTION></SELECT></TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><INPUT height=17 
      src="http://www.csdn.net/images/sousuo.gif" type=image width=44> 
  </TD></FORM></TR></TBODY></TABLE>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 
width=770>
  <TBODY>
  <TR>
    <TH align=left>Effective C++ 2e Item28 &nbsp;&nbsp;&nbsp; 
  </TH></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 
width=770>
  <TBODY>
  <TR>
    <TD align=left width=300><B>关键字:</B><BR>Effective C++ </TD>
    <TD align=middle width=120><B>贴文时间</B><BR>2001-7-22 10:14:13 </TD>
    <TD align=middle width=80><B>文章类型: </B><BR>翻译 </TD>
    <TD align=middle width=100><B>给贴子投票 </B><BR><A 
      href="http://www.csdn.net/develop/addscore.asp?id=8989">投票</A> </TD></TR>
  <TR>
    <TD>&nbsp; lostmouse &nbsp;&nbsp; 翻译 </TD>
    <TD colSpan=3 vAlign=top><B>出处: </B><A 
      href="http://www.csdn.net/develop/article/8/Effective%20C++%202e%20e-book">Effective 
      C++ 2e e-book </A></TD></TR>
  <TR>
    <TD bgColor=#cccc99 colSpan=5>&nbsp;</TD></TR></TD></TR></TBODY></TABLE>
<DIV align=center>
<DIV align=left class=fst>
<DIV class=fstdiv3 id=print2><BR><BR>
<P>条款28: 划分全局名字空间</P>
<P>全局空间最大的问题在于它本身仅有一个。在大的软件项目中,经常会有不少人把他们定义的名字都放在这个单一的空间中,从而不可避免地导致名字冲突。例如,假设library1.h定义了一些常量,其中包括:</P>
<P>const double LIB_VERSION = 1.204;</P>
<P>类似的,library2.h也定义了:</P>
<P>const int LIB_VERSION = 3;</P>
<P>很显然,如果某个程序想同时包含library1.h和library2.h就会有问题。对于这类问题,你除了嘴里骂几句,或给作者发报复性邮件,或自己编辑头文件来消除名字冲突外,也没其它什么办法。</P>
<P>但是,作为程序员,你可以尽力使自己写的程序库不给别人带来这些问题。例如,可以预先想一些不大可能造成冲突的某种前缀,加在每个全局符号前。当然得承认,这样组合起来的标识符看起来不是那么令人舒服。</P>
<P>另一个比较好的方法是使用C++ 
namespace。namespace本质上和使用前缀的方法一样,只不过避免了别人总是看到前缀而已。所以,不要这么做:</P>
<P>const double sdmBOOK_VERSION = 2.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
在这个程序库中,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 每个符号以"sdm"开头<BR>class sdmHandle { ... 
};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</P>
<P>sdmHandle&amp; 
sdmGetHandle();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 
为什么函数要这样声明?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 参见条款47</P>
<P>而要这么做:</P>
<P>namespace sdm {<BR>&nbsp; const double BOOK_VERSION = 2.0;<BR>&nbsp; class 
Handle { ... };<BR>&nbsp; Handle&amp; getHandle();<BR>}</P>
<P>用户于是可以通过三种方法来访问这一名字空间里的符号:将名字空间中的所有符号全部引入到某一用户空间;将部分符号引入到某一用户空间;或通过修饰符显式地一次性使用某个符号:</P>
<P>void f1()<BR>{<BR>&nbsp; using namespace 
sdm;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
使得sdm中的所有符号不用加<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 修饰符就可以使用</P>
<P>&nbsp; cout &lt;&lt; 
BOOK_VERSION;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
解释为sdm::BOOK_VERSION<BR>&nbsp; ...</P>
<P>&nbsp; Handle h = getHandle();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Handle解释为sdm::Handle,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// getHandle解释为sdm::getHandle<BR>&nbsp; 
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</P>
<P>}</P>
<P>void f2()<BR>{<BR>&nbsp; using 
sdm::BOOK_VERSION;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
使得仅BOOK_VERSION不用加<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 修饰符就可以使用</P>
<P>&nbsp; cout &lt;&lt; 
BOOK_VERSION;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
解释为<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// sdm::BOOK_VERSION<BR>&nbsp; ...</P>
<P>&nbsp; Handle h = 
getHandle();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 错误! 
Handle和getHandle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -