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

}

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

相关推荐
咩咦2 分钟前
C++学习笔记22:前置后置 ++/-- 和日期减日期
c++·学习笔记·运算符重载·日期类·前置++·后置++·日期减日期
计算机安禾6 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式
Harm灬小海8 分钟前
【云计算学习之路】学习Centos7系统-Linux软件包管理
linux·运维·服务器·学习·云计算·yum·rpm
魔法阵维护师16 分钟前
从零开发游戏需要学习的c#模块,第十七章(显示真正的图片——精灵绘制)
学习·游戏
婷婷_17216 分钟前
JTAG (IEEE 1149.1)学习记录
学习·程序人生·debug·芯片·jtag·phy·eth/pcie
_日拱一卒22 分钟前
LeetCode:114二叉树展开为链表
java·开发语言·算法
ygkl969822 分钟前
未完待续 模拟题
学习
天天进步201524 分钟前
从零打造 Python 全栈项目:智能教学辅助系统
开发语言·人工智能·python
一个不知名程序员www34 分钟前
算法学习入门---算法题DAY1
c++·算法
几司34 分钟前
OpenISP 模块拆解 · 第1讲:坏点校正 (DPC)
笔记·学习·isp