当前位置:编程学习 > C/C++ >>

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

总结:

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

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

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

4.域内命名空间可省

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

 


代码:

 

<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>

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,