C++命名空间using namespace std是什么意思

 更新时间:2023年01月10日 12:01:02   作者:罅隙`  
namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,下面这篇文章主要给大家介绍了关于C++命名空间using namespace std是什么意思的相关资料,需要的朋友可以参考下

一、 前言

C++中的using namespace std是什么意思呢?为了理解其中的含义,我们首先需要学习一个概念叫做命名空间

我们都知道,C语言规定变量名不能与关键字冲突,但是并没有规定变量名不能与库中的变量名冲突,但这在实际的操作的过程中就会产生意想不到的错误:

例如,将一个time变量放在main函数中,根据局部优先的原则,time变量就会被理解为一个局部变量。但当time作为一个全局变量出现的时候,由于time库中也含有一个名叫time的函数名,头文件被展开后,此time被理解为变量名还是函数名就会产生歧义。

而C++中出现的命名空间概念就是为了填C语言中的这个坑。

✪总结:同一个域中不能出现两个重名的变量名/函数名,而命名空间的提出就是为了对标识符的名称进行本地化,以此解决命名污染的问题,其作用就是定义一个新的作用域

二、作用域分解运算符

在讲命名空间的时候首先给大家介绍一个作用域分解运算符 " :: "

✪使用说明
  A,B表示两个类,而在A,B中都有成员member

  • A :: member表示类A成员中的member
  • B :: member表示类B成员中的member

当前面的类不指定的时候,默认为全局

前面说到变量名冲突的时候遵循局部优先原则,那么我们能不能就想访问到全局变量呢?我们就可以通过作用域分解运算符实现:

三、命名空间使用介绍

namespace my_variant
{
	int time = 10;
}

int main()
{
	printf("%d", my_variant::time);
}

✪基本介绍①

  • namespace是一个C++中的一个关键字
  • 我们将变量定义在自己创建的my_variant命名空间,以避免被污染
  • 访问命名空间中的变量,需要使用作用域分解运算符
  • 命名空间只能定义在全局,其中定义的变量为全局变量
namespace my_variant
{
	int time = 10;

	typedef struct Stu
	{
		char name[10];
		int age;
		int score;
	}Stu;
	
	namespace _variant
	{
		int Add(int a, int b)	
		{
			return a + b;
		}
	}
	
}

int main()
{
	my_variant::Stu data = {0};
	int ret = my_variant::_variant::Add(1, 2);
}

✪基本介绍②

  • 从上面我们可以看到命名空间中过的内容不只局限于变量名,也可以是函数名,类型名
  • 命名空间可以无限次嵌套命名空间,同样的使用里面的内容的时候也需要多次使用作用域分解运算符——一层一层对应的关系。使用嵌套命名空间可以解决命名空间内部的命名冲突
  • 一个工程中同名的命名空间最终会被合并为一个命名空间

当然我们可以看到,每次要使用命名空间中的变量都需要写很多额外的内容,有没有什么办法可以简化操作呢——我们想要访问命名空间中的space_b有两种方法:

namespace space_a
{
	int a1 = 1;
	int a2 = 2;
	namespace space_b
	{
		int b1 = 10;
		int b2 = 20;
		int b3 = 30;
	}
	namespace space_c
	{
		int c1 = 5;
		int c2 = 6;
	}
}
using namespace space_a;
using namespace space_b;

方法①:首先将space_a中的内容全部释放出来,再释放其中的space_b的内容(注意顺序不能颠倒,否则space_b认不出来)

using namespace space_a:: space_b;

方法②用什么放什么。只是将space_b中全部的内容释放出来,而不会对其他的内容产生影响。

释放出来之后我们便可以愉快自由的使用了:

四、using namespace std

经过上面的学习,我们不难理解using name std的作用是释放std命名空间中的变量名,函数名以及类型名,其中std是C++标准库的命名空间。

我们在书写代码的时候为了方便于是将C++标准库中的命名空间完全展开了,但是最好的做法我想还是用什么放什么。

另外,标准C++库中提供两种头文件,前面以C开头的头文件是支持命名空间的,而后者是不支持的。

总结 

到此这篇关于C++命名空间using namespace std是什么意思的文章就介绍到这了,更多相关C++命名空间using namespace std内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言进阶之内存操作函数详解

    C语言进阶之内存操作函数详解

    这篇文章主要为大家学习介绍了C语言中内存操作函数(memcpy、memmove和memcmp)的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-07-07
  • C++操作MySQL大量数据插入效率低下的解决方法

    C++操作MySQL大量数据插入效率低下的解决方法

    这篇文章主要介绍了C++操作MySQL大量数据插入效率低下的解决方法,需要的朋友可以参考下
    2014-07-07
  • 详解C++ 拷贝构造函数和赋值运算符

    详解C++ 拷贝构造函数和赋值运算符

    本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。有需要的朋友可以看下
    2016-12-12
  • Microsoft Visual Studio 2022的安装与使用详细教程

    Microsoft Visual Studio 2022的安装与使用详细教程

    Microsoft Visual Studio 2022是Microsoft Visual Studio软件的一个高版本,能够编写和执行C/C++代码,具有强大的功能,是开发C/C++程序的主流软件,这篇文章主要介绍了Microsoft Visual Studio 2022的安装与使用详细教程
    2024-01-01
  • 利用C语言实现顺序表的实例操作

    利用C语言实现顺序表的实例操作

    顺序表是线性表中的一种重要的数据结构,也是最基础的数据结构,所以他不仅是学习中的重点,也是应用开发非常常用的一种数据结构。这篇文章介绍如何利用C语言实现顺序表。
    2016-08-08
  • C++ 双冒号::符号详解

    C++ 双冒号::符号详解

    本文主要介绍了C++ 双冒号::符号详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C++中vector可以作为map的键值实例代码

    C++中vector可以作为map的键值实例代码

    这篇文章主要介绍了C++中vector可以作为map的键值实例代码,需要的朋友可以参考下
    2017-07-07
  • Qt写入Json文件的方法详解(含源码+注释)

    Qt写入Json文件的方法详解(含源码+注释)

    在Qt库中,为JSON的相关操作提供了完整的类支持,下面这篇文章主要给大家介绍了关于Qt写入Json文件(含源码+注释)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 剖析C语言关键字之void,const,return

    剖析C语言关键字之void,const,return

    这篇文章主要为大家介绍了C语言关键字之void,const,return,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 关于双向链表的增删改查和排序的C++实现

    关于双向链表的增删改查和排序的C++实现

    下面小编就为大家带来一篇关于双向链表的增删改查和排序的C++实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论