C++中的命名空间

命名空间

1. 概念

通过定义命名空间,可以将符号分类管理,防止命名冲突。

2. 使用方式

  • 作用域限定符 std::cout
  • using 编译指令 using namespace std;
  • using 声明机制 using std::cout

using 编译指令简洁,但易发生冲突。常用using 声明机制。且,using 声明函数时不用带形参部分。

int main(){
    //作用域限定符
	std::cout << "Hello world" << std::endl;
    
    //using 声明机制
    using std::cout;
    cout << "hello world" << std::endl;
    
    //using 编译指令
    using namespace std;
    cout << "hello world" << endl;
}

3. 匿名空间

特殊的命名空间

namespace{
    int num = 5;
}
int main(){
    cout << "num = " << num << endl;
    cout << "num = " << ::num << endl;
    // 二者等价
}

可以将匿名空间看作全局变量,但匿名空间的实体注意不要和全局的实体重名,易发生冲空。

int num = 10;
namespace{
int num = 8;
}

int main(){
    cout << "num = " << num << endl;
    // 只能读到 10, 而非8。即使用 ::num也不行。匿名空间的重名实体无法被访问到。
}

4. 匿名空间和有名空间的嵌套

匿名套匿名

 namespace{
     namespace{
         如果发生重名,则无法访问到。
     }
 }

匿名套有名

namespace{
	namespace A{
        //通过 ::A:: 访问,或者 A::访问
    }
}

有名套匿名

namespace A{
	namespace{
		// 都通过 A:: 进行访问	
	}
}

有名套有名

namespace A{
	namespace B{
		// A::B:: 这样访问
	}
}
posted @   zxinlog  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示