C++ 学习 之 名字空间 namespace


必须在模块里面 extern 声明

在一个 cpp 文件中, 一个namespace 可以多次定义,最后合并,使用 using namespace A 这种引入方式的话,使用的时候可以用所有 A 中的数据

多个 cpp 文件的话,不能会自动合并相同的 名字空间,(但是匿名的名字空间不会合并)所以不能重复定义

复制代码
namespace A {
    int a = 0;
    void fun();
}

using  A::a;

namespace A {
    int b = 1;
}

int main()
{
   std:: cout << b <<std:: endl;
}

如果是上面的写法的话,不能使用没有引入的名字空间里面的变量和函数

改成下面的就是对的

复制代码
namespace A {
    int a = 0;
    void fun();
}

using  A::a;

namespace A {
    int b = 1;
}
using A::b;

int main()
{
   std:: cout << b <<std:: endl;
}
复制代码
namespace A {
    int a = 0;
    void fun();
}

using namespace A;
int a = 1;

int main()
{
   std:: cout << a <<std:: endl;  // 这个写法是错误的
   std::cout << ::a << std::endl;  // 输出的是全局变量 a
   std::cout << A::a << std::endl;  // 输出的是 A 中的变量 a

}

要注意的是上面的情况,使用的时候要说明是调用哪一个

相关推荐
xuhaoyu_cpp_java2 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
想吃火锅10052 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
专注VB编程开发20年2 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
cfm_29142 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
~小先生~2 小时前
Python从入门到放弃(一)
开发语言·python
许彰午3 小时前
17_synchronized关键字深度解析
java·开发语言
z落落3 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊3 小时前
【Rust】02-变量、不可变性与基础类型
开发语言·后端·rust
阿正的梦工坊3 小时前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience3 小时前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#