【命名空间】using namespace std是什么意思?

news2024/9/21 5:41:59

目录

  • 一、前言
  • 二、命名空间
    • 2.1命名空间的定义
    • 2.2命名空间的成员调用
      • 2.2.1加命名空间名称及作用域限定符
      • 2.2.2使用using将命名空间中某个成员引入
      • 2.2.3使用using namespace 命名空间名称 引入
    • 2.3命名空间的成员的优先级
  • 三、using namespace std

一、前言

我们很多接触过C++编程语言的小伙伴们,虽然已经写了不少C++的代码,但是一旦被问到C++中using namespace std;这段代码是干什么用的,很多小伙伴估计自己也不是很了解(包括我自己,虽然我自己已经写了大概1万多行C++代码)。想要知道这段代码的意义,你的有命名空间的概念。
我们都知道,C语言规定变量名不能与关键字冲突,但是并没有规定变量名不能与库中的变量名冲突,但这在实际的操作的过程中就会产生意想不到的错误:
在这里插入图片描述
但当time作为一个全局变量出现的时候,由于time库中也含有一个名叫time的函数名,头文件被展开后,此时编译器已经理解不了这个time是函数还是变量,所以编译器报错了。
在假设一个场景:员工A与员工B在同一家公司开发项目,员工A在编写自己代码时写了一个名叫a的函数,员工B在编写自己代码时写了一个a的变量,那么他们在最后整合成一个项目文件时,这个a是不是也有歧义了?编译器是不是也要"罢工"了?
所以,为了解决这个"坑"C++引入了命名空间这个概念。

二、命名空间

2.1命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。如:

namespace Ting
{
	int a = 10;
}

命名空间中可以定义变量/函数/类型,如:

 namespace Ting
{
	int time = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}

命名空间也可以嵌套命名空间,如:

namespace Ting
{
	int a;
	int b;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace ting
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

 namespace Ting
{
 int Mul(int left, int right)
 {
 return left * right;
 }
}

一个工程中的test.4.6.h和上面test.4.6.cpp中两个Ting会被合并成一个。

2.2命名空间的成员调用

命名空间的使用有三种方式:

  • 加命名空间名称及作用域限定符
  • 使用using将命名空间中某个成员引入
  • 使用using namespace 命名空间名称 引入
    注:作用域限定符::

2.2.1加命名空间名称及作用域限定符

在这里插入图片描述

2.2.2使用using将命名空间中某个成员引入

在这里插入图片描述

2.2.3使用using namespace 命名空间名称 引入

在这里插入图片描述
using namespace Ting这段代码可以看成将Ting最外层的大括号去掉,此时t就变成全局变量了,所以就可以被访问到了。

2.3命名空间的成员的优先级

当命名空间里的成员变量与全局变量和局部变量同名时谁的优先级要高?
思考一下下面代码的输出是什么?

#include<iostream>
namespace Ting
{
	int t = 10;
}
using namespace Ting;
int t = 100;
int main()
{
	int t = 1000;
	printf("%d\n", t);
	return 0;
}

答案是1000。所以得到的结论是在局部函数里,局部变量优先级比全局变量和命名空间的局部变量都要高。
那这段代码呢?

#include<iostream>
namespace Ting
{
	int t = 10;
}
using namespace Ting;
int t = 100;
int main()
{
	//int t = 1000;
	printf("%d\n", t);
	return 0;
}

在这里插入图片描述
当准备用代码去验证时就已经发生了错误,但是这也验证了上面的看法。using namespace Ting的作用就是去掉它的大括号,变量t变成了全局变量,但是下面t有被重新声明了,所以编译器报错了。

三、using namespace std

通过上面的学习,我们不难理解using name std的作用是释放std命名空间中的变量名,函数名以及类型名,其中std是C++标准库的命名空间。
我们在书写代码的时候为了方便于是将C++标准库中的命名空间完全展开了,这种做法是不建议的为什么呢?因为你展开的越多,你使用变量就越受限制。最好的做法我想还是用什么放什么,或者前面加上作用域。比如:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

考了华为认证,如何找工作?能进哪些公司?有没有前景?

哪些人适合考华为&#xff1f;考了华为认证好不好找工作&#xff1f;这应该是困扰很多网工的问题。 俗话说&#xff0c;男怕入错行&#xff0c;女怕嫁错郎。如何选择一条适合自己的道路&#xff0c;提前做好职业规划&#xff0c;对个人职业发展至关重要。 下面就为大家整理了…

C#基础学习--预处理指令

目录 什么是预处理指令 基本规则 #define 和 #undef 指令 条件编译 条件编译结构 诊断指令 行号指令 ​编辑 区域指令 #pragam warning 指令 什么是预处理指令 源代码指定了程序的定义&#xff0c;预处理指令指示编译器如何处理源代码 基本规则 #define 和 #undef 指令…

基于uniapp+vue微信小程序的在职考研学习辅导系统

1系统具有良好的集成性&#xff0c;提供标准接口&#xff0c;以实现与其他相关系统的功能和数据集成。开放性好&#xff0c;便于系统的升级维护、以及与各种信息系统进行集成。功能定位充分考虑平台服务对象的需求。 一个微信小程序由.js、.json、.wxml、.wxss四种文件构成&…

CSS学习(4) - 链接,列表和表格

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 CSS链接CSS列表CSS表格 CSS链接 链接样式&#xff0c;通过 color font-family background 等来设置&#xff1a; a{color: hotpink;font-size: 30px; }可以指定不同的链接时刻来指定不同的样式&#xff1a; l…

Python中随机梯度下降法

随机梯度下降法 批量梯度下降使用全部的训练样本来计算梯度&#xff0c;并更新模型参数&#xff0c;因此它的每一次迭代计算量较大&#xff0c;但对于凸优化问题&#xff0c;可以保证每次迭代都朝着全局最优解的方向前进&#xff0c;收敛速度较快&#xff0c;最终收敛到的结果…

synchronized原理:

vm中每个对象都会有一个监视器Monitor&#xff0c;监视器和对象一起创建、销毁。监视器相当于一个用来监视这些线程进入的特殊房间&#xff0c;其义务是保证&#xff08;同一时间&#xff09;只有一个线程可以访问被保护的临界区代码块。每一个锁都对应一个monitor对象&#xf…

如何训练自己的大型语言模型

如何使用 Databricks、Hugging Face 和 MosaicML 训练大型语言模型 (LLM) 介绍 大型语言模型&#xff0c;如 OpenAI 的 GPT-4 或谷歌的 PaLM&#xff0c;已经席卷了人工智能世界。然而&#xff0c;大多数公司目前没有能力训练这些模型&#xff0c;并且完全依赖少数大型科技公司…

LaoCat带你认识容器与镜像之Docker网络

近期比较忙&#xff0c;心思也比较乱&#xff0c;难得今天休息&#xff0c;闲来无事&#xff0c;借机更新一下系列 ~ 系列目录 LaoCat带你认识容器与镜像&#xff08;一&#xff09; LaoCat带你认识容器与镜像&#xff08;二【一章】&#xff09; LaoCat带你认识容器与镜像&…

软件安全性与隐私保护的最佳实践

在当今数字化时代&#xff0c;随着软件使用的普及和信息技术的发展&#xff0c;软件安全性和隐私保护越来越成为了IT领域关注的热点问题。在此&#xff0c;本文将探讨软件安全性和隐私保护的最佳实践&#xff0c;以帮助大家更好地保护自己的信息安全。 一、软件安全性最佳实践…

数据结构与算法八 优先队列

一 优先队列 普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除。在某些情况下&#xff0c;我们可能需要找出队列中的最大值或者最小值&#xff0c;例如使用一个队列保存计算机的任务&#xff0c;一般情况下计算机的任务都是有优先级…

C语言-malloc、free、memset、realloc、strcpy

malloc()开辟指定内存空间 函数原型 void *malloc(size_t size) C 库函数 void *malloc(size_t size) 分配所需的内存空间&#xff0c;并返回一个指向它的指针。 free 释放内存空间 free C 库函数 void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的…

紧跟时代潮流,如用ChatGPT速成自媒体达人

每一个选题是否成为爆款和热门&#xff0c;这个就占了80%&#xff0c;为什么&#xff1f;因为我看到你的标题&#xff0c;我可以点进去啊&#xff0c;不管内容如何&#xff0c;至少让人眼前一亮&#xff0c;有点进去的欲望&#xff0c;至少浏览量会很大&#xff0c;这就成功了一…

【LeetCode: 1043. 分隔数组以得到最大和 | 暴力递归=>记忆化搜索=>动态规划 | 线性dp 区间dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用ETL工具Sqoop,将MySQL数据库db03中的10张表的表结构和数据导入(同步)到大数据平台的Hive中

在MySQL中&#xff0c;创建一个用户&#xff0c;用户名为sqoop03&#xff0c;密码为&#xff1a;123456 启动MySQL&#xff1a;support-files/mysql.server start 进入MySQL&#xff1a;mysql -u root -p 创建用户sqoop03&#xff1a;grant all on *.* to sqoop03% identifi…

5.5 高斯型求积公式简历

学习目标&#xff1a; 我会按照以下步骤学习高斯求积公式简介&#xff1a; 理解积分的概念&#xff1a;学习什么是积分以及积分的几何和物理意义&#xff0c;如面积、质量、电荷等概念。 掌握基本的积分技巧&#xff1a;掌握基本的积分公式和技巧&#xff0c;如换元法、分部积…

重要通知!报表控件FastReport VCL将停止支持旧的 Delphi 版本

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…

视频批量剪辑:如何给视频添加上下黑边并压缩视频容量。

视频太多了&#xff0c;要如何进行给视频添加上下黑边并压缩视频容量&#xff1f;今天就由小编来教教大家要如何进行操作&#xff0c;感兴趣的小伙伴们可以来看看。 首先&#xff0c;我们要进入视频剪辑高手主页面&#xff0c;并在上方板块栏里选择“批量剪辑视频”板块&#…

PX4无人机调参

文章目录 前言一、滤波参数二、PID参数自动调参手动调参角速率环姿态环 前言 PX4 1.13.2 日志分析软件&#xff1a;flight review https://logs.px4.io/ 一、滤波参数 调参时可以用自稳模式飞行 在调滤波器参数之前&#xff0c;可以先大致调一下PID的参数&#xff0c;角度率…

4-log打印

1.相关文件 2.示例 #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "nrf.h" #include "nrf_delay.h" #include "app_error.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" …

WPF教程(九)--数据绑定(2)--绑定模式

一、绑定模式 绑定模式以及模式的使用效果。 示例如下是根据ListBox中的选中项&#xff0c;去改变TextBlock的背景色。将 TextBlock 的背景色绑定到在 ListBox 中选择的颜色。在下面的代码中针对TextBlock的 Background 属性使用绑定语法绑定从 ListBox 中选择的值。代码如下。…