物探论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 963|回复: 0

[Envi] C++库研究笔记——命名空间namespace 嵌套后的作用域问题

[复制链接]
发表于 2013-8-12 11:27:57 | 显示全部楼层 |阅读模式

总结:

1.::ant 表根命名空间,或匿名空间

2.同时存在 ::ant::i 和::ant::blas::i,  ant::detail::i时,在::ant::detail中使用i时,默认调用ant::detail::i

3.平级namespace 调用用,要加相应的命名空间

4.域内命名空间可省

5.即使存在多个相同名字的命名空间,不会报错,按最局部分调用原则调用,如同全局变量与局部变量名字一样时,优先调用局部变量


代码:


[cpp] view plaincopy
<span style="font-size:14px;">#include <stdlib.h>  

#include <iostream>  

namespace detail  
{  
const int i=99;  
}  

namespace ant  
{  
namespace blas  
{  
const int i=0;  
}//end blas  

const int i=3;  

namespace detail  
{  
const int i=33;  
void test()  
{  
    std::cout<<"i:"<<i<<std::endl;  // 33  
    std::cout<<"::detail::i"<<::detail::i<<std::endl; // 99  
    std::cout<<"detail::i"<<detail::i<<std::endl; // 33  
    std::cout<<"::ant::blas::i:"<<::ant::blas::i<<std::endl;// 0  
    std::cout<<"ant::blas::i"<<::ant::blas::i<<std::endl;   // 0  
    std::cout<<"blas::i"<<blas::i<<std::endl;   // 0 平级  
    //std::cout<<"::blas::i"<<::blas::i<<std::endl;   // error  
    std::cout<<"ant::i"<<ant::i<<std::endl;// 3  
}  
}// end detail  

}//end namespace ant  

using namespace std;  
int main()  
{  
    ant::detail::test();  
    return 0;  
}</span>  

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|物探论坛 ( 鄂ICP备12002012号 微信号:iwutan )

GMT+8, 2024-3-29 03:55 , Processed in 0.076625 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表