啃书《C++ Primer Plus》之 C++ 名称空间1

笔者正在学习C++语言,啃书系列将会持续更新,希望可以同大家一起学习,一起进步。如果文章有帮助的话,记得点赞、收藏、关注一条龙哦。

系列文章:
啃书《C++ Primer Plus》之 C++ 函数指针
啃书《C++ Primer Plus》之 C++ 名称空间2


名称空间是C++语言不可或缺的特色,在名称管理上有着举足轻重的作用。这篇文章就来总结一下名称空间这个知识点。
参考资料:《C++ Primer Plus》
本文思维导图如下:
在这里插入图片描述
由于内容较多,该节拆分成两部分,本文为上部分,内容到名称空间的冲突。下部分见《名称空间2》


名称空间的作用与使用规则

名称空间解决的问题

在名称空间之前,C和C++语言通过局部、全局、静态等属性限制一个变量或函数的作用域,同时限定其名称作用范围。但是这样的解决方式在面临大项目时还是会出现问题,不同文件可能会定义相同名称的全局变量,这样如果一个文件同时引用了包含同一名称全局变量的两个文件,就会造成名称空间问题。
名称空间的引入,就是为了解决这类问题,为名称提供一个名称空间,不同的名称空间,可以包括相同的名称,彼此互不干涉。
另外,上文提到的全局变量,在引入名称空间的机制后,也有了对应的名称空间——全局名称空间(global namespace)。这个名称空间包含了所有的全局变量。

名称空间特点与成员的声明定义

名称空间特点

名称空间的声明与定义,需要用到关键字: namepace,写法如下:

namespace 名称空间名称{
.
.
.
} 

名称空间的作用域是全局。也就是说,对于整个工程,某个文件A引入了包含名称空间S的文件B,那么文件A便可以使用名称空间S。常见的,我们引用 iostream 其中就包含了 std这个名称空间。(这个提点在嵌套时是例外的,在下文会谈到)

名称空间是开放的。 这意味着可以加入一个名称到已有的名称空间中,语法同上。这也就代表着,当编译器检测到上文的语法时,如果已经存在这个名称空间,则会将这个代码块中的内容添加到已有的名称空间中,否则就创建一个新的名称空间。

需要特别注意的是:
名称空间不能位于代码块中!
名称空间不能位于代码块中!
名称空间不能位于代码块中!
名称空间不能位于代码块中!

’写名称空间内容的时候,一定要在代码快之外,不要放在任何的函数等的代码块中。

名称空间内容

在名称空间大括号中可以定义结构,类,变量,函数等,他们都属于这个名称空间。
需要注意的是,结构,类,函数这些内容的声明与定义通常是分开的,而在命名空间中,声明和定义也可以分开写。

我们知道,在c++语言中,声明和定义是两个不同的概念,声明告诉编译器格式,而定义是具体实现。
通常,将成员定义在名称空间中的代码放在 .cpp文件中,而将成员声明在名称空间的代码放在对应的头文件中。

举个栗子:

//test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
namespace test
{
   
    int k = 10;
    int f(int,int);
    class A
    {
   
    public:
        int getA();
        void setA(int);
    private:
        int a;
    };
}
#endif // TEST_H_INCLUDED

//test.cpp
#include "test.h"
namespace test
{
   
    int f(int a,int b)
    {
   
      
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值