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

}

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

相关推荐
司铭鸿1 小时前
祖先关系的数学重构:从家谱到算法的思维跃迁
开发语言·数据结构·人工智能·算法·重构·c#·哈希算法
wavemap1 小时前
先到先得:免费订阅一年ChatGPT Go会员
开发语言·chatgpt·golang
sulikey2 小时前
C++ 四十年:一段跨越时代的语言旅程
c++·c++40周年
WXG10112 小时前
【Flask】前后端交互示例
笔记·学习
m***D2862 小时前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
我叫张小白。2 小时前
JavaScript现代语法梳理:ES6+核心特性详解
开发语言·javascript·typescript·es6
d111111111d2 小时前
STM32--SPI通讯外设-学习笔记
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d2 小时前
在STM32中有参宏定义define该怎么使用
笔记·stm32·单片机·嵌入式硬件·学习
-森屿安年-2 小时前
LeetCode 283. 移动零
开发语言·c++·算法·leetcode
寻找华年的锦瑟2 小时前
Qt-FFmpeg案例(0基础,包含环境配置)
开发语言·qt·ffmpeg