关于未命名空间

未命名空间其实也是可以不连续定义的,只不过前提是,在新定义里头必须看见旧定义.但是,在调用未命名空间里的成员时,只会在调用时的当前文件中找寻,不会去别的文件中找.换句话说,即使看见了旧定义,只要旧定义里的成员定义不出现在当前文件中,则调用时仍是会出错,错误发生链接时刻.
   如果把未命名空间放在头文件中声明,而空间里头也有函数的定义,则每个包含该文件的程序文件中都会有该空间的函数,但是都认为是不同的函数,不会出现重复定义的错误.这是由未命名空间的设计本意决定的.记住,未命名空间成员的调用只在当前文件中找寻.
    与C中的static声明不同,C中声明了static的函数必须提供定义.否则编译时刻出错.而用未命名空间的话,可以出现声明而不出现定义,只要没有调用到的话.这又是由名字空间可以不连续定义的性质决定的.
   总而言之,未命名空间的性质比较特殊,它的成员调用只会在当前文件中找寻,也因如此,可以重复定义同样的函数在不同的文件.注意,如果在一个文件中重复定义还是错误的,因为会在调用时二义.
       另外说一点,编译器编译时只能按文件一个一个来,一次只编译一个.因此,如果在程序文本里出现了一个未在头文件声明的函数,则实际上该函数仍是被视为全局的(指整个程序),你在其它文件再定义同名同类型函数会出现重定义错误,而这一切,只能在链接时才能发现,因为编译是按一个一个文件来的.
     同样,普通的名字空间(非未命名的)中,如果在某个程序文本中出现了一个新成员的定义,则该名字就不能和该名字空间里的名字冲突.即使该新定义的成员不是由头文件的声明中引入的.而是在某个程序文件中引入的.因为它同样认为是该空间的成员.所以同一空间中成员名字不能相同(重载的话看情况,这里不深入讨论).
    所以为避免对象多次实现,应将声明与实现分离,声明放在头文件中.不建议在程序文本中引入新的对象. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值