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

2023-10-29

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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • lambda 始终返回“1”

    有这样的代码 include
  • 将信号/槽(QObject)添加到 QGraphicsItem:性能受到影响?

    我想将信号 槽添加到 QGraphicsItem 以便我可以从另一个线程访问 QGraphicsItemObjects 我知道有两个选项 使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承 使用
  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • C# 中的 DateTime.Parse 抛出异常

    我不知道为什么抛出异常 这是工作代码 DateTime Parse 1 12 2012 12 00 00 AM 这是抛出异常的一个 DateTime Parse 1 13 2012 12 00 00 AM 抛出的异常是 格式异常 包括此消息
  • 仅使用 1 行 C++ 初始化 2d 向量

    我需要能够初始化一个 2D 向量 int同一条线我在其中创建它 更具体地说 我必须创建一个3x2大小 2D 向量并将其所有值设置为 0 仅使用1行代码 有没有一种方法可以在不使用 for 循环和几行代码的情况下完成此操作 尝试这个 std
  • CRTP 能否完全取代小型设计的虚拟功能?

    Is CRTP http en wikipedia org wiki Curiously recurring template pattern有足够的能力智胜virtual功能齐全 我认为 CRTP 的唯一缺点是为每个重复模式生成大量代码
  • LockBits 性能关键代码

    我有一个方法需要尽可能快 它使用不安全的内存指针 这是我第一次尝试这种类型的编码 所以我知道它可能会更快
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • 通知另一个线程数据可用的最快方法是什么?有什么替代旋转的方法吗?

    我的一个线程将数据写入循环缓冲区 另一个线程需要尽快处理该数据 我本来想写这么简单的spin 伪代码 while true while a i do nothing just keep checking over and over proc
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • 如何为用户提供给定 boost::spirit 语法的自动完成建议?

    我正在使用 Boost Spirit 在我的 C GUI 应用程序中为非技术用户构建简单的 数据过滤器 语言 语言与纯英语非常相似 并且可以解析为 AST 我被要求使该过程尽可能对用户友好 因此我希望提供类似 CLang 的错误消息 无法识
  • 自定义文件属性

    我需要遵循 在我的申请中 我有文件 需要随时签入和签出的文件 当我从应用程序中签出文档时 我需要将自定义属性添加到文件中 以便稍后在签入文档时可以识别它 我尝试使用以下代码使用 DSOFile 中的 OleDocumentPropertie
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • 使用 PrimarySearcher.FindAll() 时出现内存泄漏

    我也有一个使用插件和应用程序域长时间运行的服务 并且由于使用目录服务而出现内存泄漏 请注意 我正在使用 system directoryservices accountmanagement 但据我了解 它使用相同的底层 ADSI API 因
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • 从原始 URL 获取重定向 URL

    我的数据库中有一个表 其中包含一些网站的 URL 我必须打开这些 URL 并验证这些页面上的一些链接 问题是某些 URL 被重定向到其他 URL 对于这样的 URL 我的逻辑是失败的 有什么方法可以传递原始 URL 字符串并获取重定向的 U
  • 通过 boost::python 将 C++ 对象传递给 python 函数

    我想在 C 应用程序中使用嵌入 python 并调用 python 脚本中定义的函数 该函数的参数是一个 C 对象 看我的代码 class Test public void f std cout lt lt sss lt
  • 如何注销多个非当前用户的会员用户?

    我正在使用属于 MVC2 默认项目一部分的 MembershipProvider 我希望能够获取用户名列表 注销用户 并在需要时销毁他们的会话 我能想到的最接近的是 foreach string userName in UserNames

随机推荐

  • 浅谈web前端工程师hr面试经典问题20+

    目录 前言 一 经典灵魂20问 1 你为什么不考研 2 你如何看待加班 3 为什么选择北京 4 最能概况你自己的三个词 5 你喜爱的运动 6 你的座右铭 7 谈谈你的缺点 8 对于这项工作你有那些可预见性的困难 9 如果我录用你 你将怎样开
  • 永洪科技上榜2023年度 IDC中国FinTech 50

    8月15日 全球知名的第三方研究机构IDC发布了 2023 IDC中国FinTech 50 榜单 永洪科技凭借完善的产品服务体系 差异化的产品优势以及丰富的客户实践经验 已经连续两年荣登 IDC 中国 FinTech 50 榜单 IDC作为
  • Keras Conv1d 参数及输入输出详解

    Conv1d in channels out channels kernel size stride 1 padding 0 dilation 1 groups 1 bias True filters 卷积核的数目 即输出的维度 kerne
  • C++函数模板特化,类模板特化

    一 模版与特化的概念 1 函数模版与类模版 C 中模板分为函数模板和类模板 函数模板 是一种抽象函数定义 它代表一类同构函数 类模板 是一种更高层次的抽象的类定义 2 特化的概念 所谓特化 就是将泛型的东西搞得具体化一些 从字面上来解释 就
  • 抓包神器之Charles,常用功能都在这里了

    我们在开发网站项目的时候 我们可以通过浏览器的debug模式来看request以及response的数据 那么如果我们开发移动端项目没有网页呢 如何抓取数据呢 前几天有个做服务端的师弟跟我说他不用抓包工具 遇到问题直接debug代码 那我问
  • C#开机自动启动程序代码

    新建一个winform拖一个checkbox进来 然后设置它的changed事件 已经测试过 可以直接复制使用 private void checkBox1 CheckedChanged object sender EventArgs e
  • c语言输入一串字符统计小写字母个数,c++编程实现输入一串字符,分别统计数字字符、大、小写字母、其它字符的个数...

    满意答案 keweo4016029 推荐于 2018 04 26 采纳率 40 等级 12 已帮助 6206人 include using namespace std void main int di 0 bc 0 sc 0 el 0 数字
  • 【Bug修复】解决Idea连接不上远程服务器的Redis:redis.clients.jedisJedisConnectionException: Failed to create socket

    前言 相信出现这个问题的小伙伴已经搜了很久如何解决这个问题 然而尝试了一遍又一遍后还是报出同样的错误 步骤1 修改redis conf文件 1 注释掉原先的 bind 127 0 0 1 2 将protected mode yes 修改为n
  • cnn手写汉字识别

    import os import numpy as np import struct import PIL Image import cv2 import scipy misc from sklearn utils import shuff
  • Shell语法(循环+文件读写)

    2 语法 循环 文件读写 01 for循环 语法格式 for 变量 in 字符串 do 语句1 done 介绍完for语法格式后 先看一下Linux自带的一个类似for循环的命令 seq命令 seq 1 15 输出1一直到15 1 2 3
  • OpenWrt 添加usb驱动及相关脚本

    第一步 添加内核相关支持 编译openwrt支持USB自动mount功能 make menuconfig 1 添加USB相关支持 Kernel modules gt USB Support gt lt gt kmod usb core Ke
  • 【Unity】ViewportPointToRay和ScreenPointToRay的区别

    最简单的辨别方法就是 ScreenPointToRay 根据屏幕上的坐标点 范围是0 屏幕尺寸 获得射线 ViewportPointToRay 根据视口的上的一个坐标 范围是0 1 获得射线 以下这两段代码效果是相同的 void Updat
  • 排序算法总结——归并排序

    1 算法原理及步骤 2 代码实现 3 复杂度分析 4 稳定性分析 1 算法原理及步骤 归并排序体现的是一种分治 合并的思想 我们知道 数组长度越小 排序越简单 而不管数组有多大 都是由小数组构成的 因此 要想对一个长度为N的数组进行排序 就
  • [转]ADAS各功能模块及ADAS解决方案提供商详解

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com ADAS 采用
  • response.sendRedirect的使用

    response sendRedirect的使用 原创 2014年03月18日 16 46 59 2933 0 0 使用sendRedirect 来传递字符参数 使用sendRedirect 代码 response sendRedirect
  • JVM系列之对象是否存活

    前言 之前我们讲过了JVM的内存区域和内存溢出 今天我们谈下处于JVM中的对象的问题 这些对象是否存活 如何判断 又如何去处理呢 带着这些疑问我们开启今天的JVM之旅 如何判断对象是否存活 引用计数算法 给对象中添加一个引用计数器 每当有一
  • windows10 配置ftp实现局域网文件共享。(包含坑点及解决)

    坑点写在前面 为在网上的教程却没有成功的用户节约时间 坑点一 打开网络发现 控制面板 gt gt 网络和Internet gt gt 网络和共享中心 gt gt 高级共享设置 坑点二 WindowsDefender 防火墙 控制面板 gt
  • 爬虫实例(二)—— 爬取高清4K图片

    大家好 我是 Enovo飞鱼 今天继续分享一个爬虫案例 爬取高清4K图片 加油 目录 前言 增加异常处理 增加代码灵活性 基本环境配置 爬取目标网站 分析网站页面 具体代码实现 图片下载示例 感谢支持 前言 上篇内容 我们已经了解并惊叹于5
  • 算法训练营第二十四天(8.7)

    目录 LeeCode39 Combination Sum LeeCode39 Combination Sum II LeeCode131 Palindrome Partitioning LeeCode39 Combination Sum 题
  • 一文弄清using namespace std;的作用[2021最新版]

    using namespace std 到底有什么用 为什么我们每次头文件后面都要加它 不加它会怎么样 导读 对于很多学习C 的同学 老师教同学们写的一个程序就是 hello world 同时也会在不经意间在头文件的后面加上using na