war 发表于 2013-8-12 11:27:57

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

总结:1.::ant 表根命名空间,或匿名空间2.同时存在 ::ant::i 和::ant::blas::i,ant::detail::i时,在::ant::detail中使用i时,默认调用ant::detail::i3.平级namespace 调用用,要加相应的命名空间4.域内命名空间可省5.即使存在多个相同名字的命名空间,不会报错,按最局部分调用原则调用,如同全局变量与局部变量名字一样时,优先调用局部变量
代码:
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>

页: [1]
查看完整版本: C++库研究笔记——命名空间namespace 嵌套后的作用域问题