一文弄清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

【IC】Redhawk-SC输入件配置

Redhawk sc

u011808788的博客 1778

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

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

罅隙的博客 9万+

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1107

Mac上IDEA的PlantUML插件报错‘找不到Graphviz’?手把手教你用Homebrew搞定(附阿里云镜像避坑)

本文详细解决了Mac上IDEA的PlantUML插件报错‘找不到Graphviz’的问题,通过Homebrew安装Graphviz并配置阿里云镜像源,特别针对Apple Silicon芯片用户提供了优化方案。文章还涵盖了IDEA中PlantUML插件的正确配置和常见问题排查,帮助开发者高效使用PlantUML进行UML图表设计。

weixin_42619742的博客 469

using namespace std;到底是在干嘛?

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

yue152152的博客 3万+

Arduino——GY39大气压、温湿度、光照模块

前几天买东西的时候买了一个GY39,这个模块集成了温湿度,大气压,海拔,光照一体,使用起来很方面。它有两种工作模式使用串口模式时需要搭配转接板,我选择了IIC模式,看一下通信协议吧,就是关于高八位和低八位的数据。看一下接线。

戚晨夕的博客 2605

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

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

weixin_34074740的博客 278

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 406

第十六篇:Camx IFE 、OPE 各 port口功能定义

需要注意的是,类似 CSLTFEPortIdRawDump 是没有downscale功能的,所以如果遇到fov不正确的问题,可以排除下TFE这边的 output port是否被接到了 CSLTFEPortIdRawDump 上面来。我们知道Camx 的IFE 、OPE有不少的output port,各个port是有哪些功能的呢?老一点的框架平台,采用的TEF、OPE。

237

namespace命名空间和head files头文件

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

To the beyond and infinity! 623

交换机背板带宽、交换容量与包转发率到底是啥?

在网络工程中,交换机是核心设备之一,而关于它的性能指标,背板带宽、交换容量、以及包转发率往往成为人们衡量其性能的重要参数。这些术语的定义、关系、以及在实际场景中的应用,都对交换机的选型与部署有着重要意义。本文将为您全面解读这些概念,帮助您深入了解交换机的核心性能指标。

网络技术联盟站 1551

[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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

weixin_33913332的博客 2471

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

Gift-Isla 3329

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、付费专栏及课程。

余额充值