一文弄清using namespace std;的作用[2021最新版]

【C++】命名空间:“using namespace std; ”究竟何意? 在了解“using namespace std;”究竟何意?之前要先了解namespace在C++中,namespace是一种用于组织代码的机制,它可以帮助避免命名冲突并提供更为清晰的代码结构。namespace定义了一块独立的命名空间,其中可以包含各种程序元素,如类型、函数、变量和类等。在命名空间中的所有元素都通过命名空间的名称进行限定,这样可以避免多个源文件或库中同名元素之间的冲突。namespace。 阅读详情
AI摘要

using namespace std在C++中用于简化代码,避免在使用iostream库时每次都要指定std::。本文解释了命名空间的概念,如何访问命名空间,并对比了使用与不使用using namespace std的区别。使用该指令可以避免命名冲突,但可能导致命名空间污染。

using namespace std;到底有什么用?
为什么我们每次头文件后面都要加它?
不加它会怎么样?

导读
对于很多学习C++的同学,老师教同学们写的一个程序就是“hello world”,同时也会在不经意间在头文件的后面加上using namespace std;但是却没有告诉我们为什么要这么加,所以很多同学可能现在仍然不明白他的作用。

本文将详细介绍using namespace std; 帮助大家彻底理解!

概念

namespace:是指标识符的各种可见范围。是C++语言特别重要的特性,当第三方供应商提供的库时,为了避免与其他供应商或者用户定义的名字相冲突(命名空间污染),常常将库的内容放置在自己独立的命名空间中。
std:就是C++标准程序库中定义所有标识符的namespace。

命名空间的定义

这样声明一个命名空间。

namespace myName{
//相关声明及定义
}

C++通过作用域确定变量的访问权限,如全局作用域(对应全局变量)、函数作用域(对应函数局部对象)、类作用域(对应类成员)等等。命名空间对应着相应的作用域,可以将全局作用域进行分割,这样在不同命名空间定义的名字即使相同也不会发生冲突。

如何访问命名空间?

1.myName::标识符
相当于直接说明我们调用的是命名空间中的标识符
2.使用using关键字
using std::cout;
using std::endl;
以上程序也可以写成
cout << std::hex << 3.4 << endl;
3.最方便的就是使用using namespace std;

为什么要使用using namespace std;

⭐C++标准为了和C区别开!为了正确地使用命名空间,规定头文件不使用后缀.h。

例如当我们使用<iostream.h>时,相当于在C中调用库函数。

使用using namespace std
例如

#include
#include
#include
using namespace std;

这样使用的话,就相当于std命名空间内所有的标识符都已声明且存在,就像他们被声明全局变量一样,我们可以直接使用!

不使用using namespace std

cout和endl实际上是C++中的标识符,使用using namespace std;时,可以直接使用cout等标识符。

#include <iostream>
using namespace std;
int main()
{
   cout<<"halloworld!"<<endl;
}

但是当不使用using namespace std的时候,直接使用cout编译器会不识别,会产生报错:

“error: ‘cout’ was not declared in this scope"和"error: ‘endl’ was not
declared in this scope”

要加上命名空间std::才可以使用!
当程序中使用的标识符过多的话,每一句加std::就显得过于繁琐,所以一般都会在头文件后面加上using namespace std。

#include <iostream>

int main()
{
   std::cout<<"halloworld!"<<std::endl;
}

参考资料:C++命名空间namespace及using的使用: link.

C++命名空间污染:解决count ambiguous编译错误的实用指南 在C++编程中,命名空间是管理代码标识符的核心机制,它通过将相关功能分组来避免命名冲突。其原理是为每个库或模块创建独立的作用域,防止全局命名空间被污染。这一机制的技术价值在于提升代码的可维护性和可复用性,尤其在大型项目和团队协作中至关重要。常见的应用场景包括使用标准库、集成第三方库以及开发多模块系统。然而,随着C++标准库的演进,如C++17引入的并行算法和C++20的范围库,新增的`std::ranges`和`std::execution`等功能带来了更多重载,加剧了命名冲突的风险。当开发者使用`usin 阅读详情

相关推荐

指纹浏览器:DNS 泄漏防范与 WebRTC 本地 IP 屏蔽的底层实现

本文将深入 Chromium 的网络栈心脏与 WebRTC 的 P2P 底层,从 C++ 源码级别深度拆解 DNS 泄漏的成因与绝对隔离架构,以及 WebRTC 本地 IP 屏蔽的终极实现,彻底掐断这两条泄露物理身份的暗河。

数据知道的博客 733

C++中using namespacr std;的作用

会引入 std 命名空间中的所有成员,包括可能会和当前作用域中的其他标识符重名的成员,这可能会导致命名冲突。因此,在头文件中不建议使用 using namespace std;,而是应该使用前向声明或者直接加上 std:: 前缀来引用 std 命名空间中的成员。是一个常用的语句,它的作用是引入 std 命名空间中的所有成员到当前的命名空间中,这样在当前的作用域中就可以直接使用 std 命名空间中的所有成员,而不需要在每个标识符前加上 std:: 的前缀。这样能够减少代码的冗余,并使代码更加清晰、易读。

DJDJyyds的博客 8606

FastAPI + LLM 实战:5分钟搞定本地模型API服务部署(含避坑指南)

本文详细介绍了如何使用FastAPI和LLM(大语言模型)快速部署本地API服务,涵盖环境准备、模型集成、性能优化及避坑指南。通过实战示例,帮助开发者在5分钟内完成从零到生产的部署过程,提升AI应用开发效率。

weixin_29062963的博客 106

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

详尽讲解C++中命名空间的相关知识

罅隙的博客 9万+

计算机国际会议中的proceedings、conference、paper、workshop、demo:如何区分与选择?

本文详细解析了计算机国际会议中的核心概念:Conference(会议)是学术交流的主舞台,Paper(论文)是研究成果的书面呈现,被接收后收录于Proceedings(会议论文集)。Workshop(研讨会)聚焦前沿细分领域,Demo(演示)则侧重系统与工具的可交互展示。文章为研究者根据自身阶段与工作类型,如何区分与选择投稿目标提供了实用指南。

weixin_29269441的博客 563

从Multibit到Debanking:芯片设计中的时序优化完整流程解析(含真实案例)

本文深入解析芯片设计中Multibit技术与Debanking的时序优化完整流程,结合7nm移动SoC真实案例,详细探讨Multibit的核心优势、实施条件及潜在风险,并提供Debanking的触发时机与操作策略。通过平衡Multibit与Debanking,工程师可有效优化PPA(Power-Performance-Area),提升芯片设计效率。

weixin_30316097的博客 462

using namespace std;到底是在干嘛?

从那句经典的using namespace std切入,让大家彻底了解c++命名空间的由来,和具体使用方法。

yue152152的博客 3万+

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6968

C++ using namespace std详解:命名空间原理、风险与最佳实践

在C++开发中,命名空间是解决名字冲突的基础机制,它通过作用域隔离函数、变量和类型,避免大型项目中同名符号相互干扰。标准库将全部设施置于std命名空间中,而using namespace std作为一条便捷指令,将整个std中的名字暴露到当前作用域,简化了代码书写,却也引入了名字查找时的潜在歧义。理解了编译器按作用域逐层查找、并借助透明窗口感知using指令的机制,就能明白为何std::cout这种全限定名更为确定。当项目规模增大、标准库版本升级或涉及第三方库时,盲目使用using namespace st

weixin_34074740的博客 278

DeepSeek 赋能太空探索:从轨道优化到星际开拓的 AI 革命

随着人工智能技术蓬勃发展,DeepSeek 在太空探索领域展现出巨大应用潜力。本文深入剖析 DeepSeek 技术核心,包括低功耗运算、开源生态等优势,阐述其与传统航天技术的差异。从航天器自主控制、深空探测、载人航天等关键环节,结合实时轨道调整、故障诊断修复等实例,揭示 DeepSeek 对航天任务效率与安全性的提升作用。同时探讨其应用面临的太空环境适应、伦理安全等挑战,展望技术演进方向及与前沿技术融合前景,展现 DeepSeek 为人类太空探索带来的变革与深远意义。

邓邓子的博客 2259

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

namespace命名空间和head files头文件

c++一开始就有这么两行代码 #include<iostream> using namespace std; 基本上所有教科书都会解释#include<…>是一个预编译头,后面尖括号是头文件。接下来下一行是使用标准命名空间std。然后就没有然后了,或者有然后也是各种解释不清楚的东西。现在我想用一种清晰直观的解释来说明第二行的命名空间的作用和它与头文件到底有什么关系。 首先说命名空间(namespace)。 命名空间的主要作用就是为了解决“重名”带来的麻烦。 对于“重名”,其他的一些

To the beyond and infinity! 623

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 566

[C++]头文件(Header Files)和命名空间(Namespace)

文章轉自:https://blog.youkuaiyun.com/isla_forever/article/details/76933614 版權歸原作者! c++一开始就有这么两行代码 #include&lt;iostream&gt; using namespace std; 基本上所有教科书都会解释#include&lt;…&gt;是一个预编译头,后面尖括号是头文件。接下来下一行是使用标准...

图形跟班 8145

基于SC、SCL、BP、SCAN和SSC的译码算法及Matlab代码

本文将介绍几种常见的译码算法,包括SC(Successive Cancellation)、SCL(Successive Cancellation List)、BP(Belief Propagation)、SCAN(Soft-Input Soft-Output Successive Cancellation)、SSC(Stacked Successive Cancellation)的原理,并提供相应的Matlab代码实现。以上是基于SC、SCL、BP、SCAN和SSC的译码算法的Matlab代码示例。

ByteWhisper的博客 947

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Qt开发中QString转std::string乱码问题:编码原理与UTF-8解决方案

字符编码是计算机处理文本的基础概念,它定义了字符与二进制数据之间的映射规则。在跨平台开发中,不同系统默认编码的差异会导致文本显示乱码,其核心原理在于编码解码规则的不匹配。正确处理编码问题对软件国际化、数据交换和系统兼容性具有重要技术价值,特别是在涉及中文等多语言文本的场景中。本文聚焦于Qt框架下的字符串处理,深入解析QString采用UTF-16编码而std::string无固定编码的特性差异,并提供基于UTF-8的跨平台解决方案。通过分析编码转换的底层机制,帮助开发者从根本上理解乱码成因,掌握toUtf8

weixin_33913332的博客 2471

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

头文件(Header Files)和命名空间(Namespace)

c++中的“前两行”:命名空间和头文件

Gift-Isla 3329

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++ 入门基础:从命名空间到引用、inline 与 nullptr

namespace解决命名冲突;iostream提供类型更友好的输入输出方式;缺省参数让函数调用更灵活;函数重载让同一操作可以适配不同参数;引用让传参和返回更自然,但要关注生命周期;const引用解决权限控制和临时对象绑定问题;inline用更安全的方式替代宏函数的部分场景;nullptr比NULL更适合表达空指针。这些内容看起来分散,本质上都在增强 C++ 的表达能力和工程组织能力。把这些基础打稳,再继续学习类和对象、STL、模板、智能指针等内容时,很多语法设计就会顺起来。

2403_87368200的博客 253

error C2065: “cout”: 未声明的标识符

刚刚开始使用VS2008,感觉一头雾水,只写了一个hello world就好久运行不出来,第一不会用VS,第二不熟悉C++。     error C2065: “cout”: 未声明的标识符     error C2065: “endl”: 未声明的标识符     这是我遇到的第一个问题,弄了好久没弄清楚,后来才发现,仅仅是因为没有写上using namespace std;,刚开始学习C+

北冥有鱼 的专栏 3751

C++ random_shuffle与std::shuffle详解:原理、用法与迁移指南

随机排序是计算机工程中的基础操作,从抽奖派发、卡牌洗牌到机器学习数据混洗,都依赖高效且分布均匀的洗牌算法。Fisher-Yates洗牌算法以O(n)时间和O(1)空间保证每个排列等概率出现,是标准库随机排序的底层核心。C++早期提供的random_shuffle基于全局rand()实现,存在模偏差、线程不安全等问题,已在C++14弃用、C++17移除。现代C++推荐使用std::shuffle,通过显式传入mt19937等随机数引擎,实现独立可控的随机源与固定种子复现,显著提升随机质量和可测试性。本文从随机

weixin_34099526的博客 215

GCC 8.x中C++17 filesystem库的兼容性问题与解决方案

C++标准库的演进常伴随编译器实现与ABI稳定性的挑战。以C++17引入的<filesystem>库为例,它源于Boost库,旨在提供跨平台文件系统操作接口。其原理是通过封装操作系统API,实现路径处理、文件遍历等通用功能。该库的技术价值在于标准化了原本碎片化的文件操作,提升了代码可移植性。然而在GCC 8.x版本中,由于ABI稳定性考量,该库被置于实验性命名空间,导致直接使用std::filesystem时出现链接错误。解决这一GCC兼容性问题需要理解标准库实现机制,通过链接libstdc++fs库或升级

weixin_34348174的博客 343

C++ STL与Boost库选型指南:资深工程师的实战经验总结

在C++开发中,标准模板库(STL)和Boost库是两大核心工具集,理解它们的定位差异对项目技术选型至关重要。STL作为C++标准的一部分,提供了容器、算法和迭代器等基础组件,具有极佳的可移植性和性能,是构建可靠软件的首选。其设计遵循最小化和正交化原则,确保了代码的稳定性和跨平台一致性。相比之下,Boost库则扮演着前沿试验场的角色,提供了智能指针、文件系统操作和异步I/O等扩展功能,许多特性后来被纳入C++标准。从工程实践角度看,合理选择工具能显著提升开发效率和代码质量。例如,在内存管理场景中,C++11

weixin_33910385的博客 374

初识nameplace

因为由于开发需要,有的时候不同公司会开发不同的库,导致了有不同的printf,不同的cout,不同的vector,打代码时必须声明。这一句话相当于声明(作用范围限制与一个花括号内),接下来我用任何的函数,都来源于标准库,即c++自带给你的函数。但是对于一个大型的项目,工程来说,随意使用将会是一场灾难。这次c++中特有的,c语言中没有,名称空间。对于这个问题的兴趣驱动来源于一直在打的。对于具体用法日后再讲嗷,说好初识。对于初学者这确实是一个偷懒的妙招。一直在打但却一直都不理解。直接这么打是不合法的;...

milkyblue的博客 310

第七节&&摆平积木

你这么想,与平均值比较大的这部分拿出来,拿出来的这份不就是要填补到那些比较少的部分,那如果少的也记录的话,是不是就相当于我们计算所得是答案的2倍。也就是弄清每一摞积木的数量,再将他们的总数相加,再把得到的结果除以n,就得到了在高度相等的情况下每一个积木的块数。拿每一堆和平均值比较就可以了,比较的结果是多的很正常,那么要是比较的结果是少了,为什么要跳过呢?第二步,对于超过平均值的积木,计算当前积木数量和平均值的差值,把多出来的积木数量移到缺少的部分,直到积木高度相等。在每组输出结果的下面都输出一个空行。

qq_52811169的博客 256

C++模板元编程:mp_bind_front_q实现编译期类型参数绑定

模板元编程是现代C++中实现编译期计算的核心技术,它通过在编译阶段操作类型和常量表达式来生成高效代码。其基本原理是利用模板特化、SFINAE等机制,将运行时逻辑提前到编译期完成,从而实现零开销抽象。这项技术的核心价值在于提升代码的复用性、安全性和性能,广泛应用于类型萃取、策略模式、领域特定语言等场景。在Boost MP11库中,mp_bind_front_q作为高阶元函数,允许开发者对元函数进行部分应用——即预先绑定前几个类型参数,生成参数更少的新元函数。这种能力类似于函数式编程中的柯里化,特别在与mp_t

weixin_34112181的博客 381
上一篇: 一文带你彻底搞懂i++和++i的区别,谁的效率更高?
下一篇: 【见面试官的小tips】如何解释C++和C有什么不同!
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值