c++标准库 及 命名空间std

1、命名空间std
  C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间C++标准库中所有标识符都包含在该命名空间中
  如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。

 

  <iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout。、

 

  C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

 

  std::cout << std::hex<< 3.4<< std::endl;

 

2、使用using关键字。

 

  using std::cout;
  using std::endl;

 

以上程序可以写成

 

  cout << std::hex<< 3.4<< endl;

 

3、最方便的就是使用using namespace std;

 

例如:

 

  #include <iostream>
  #include <sstream>
  #include <string>
  using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

 

  cout << hex<< 3.4<< endl;

 

  因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。 所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"。

复制代码
比如
#include <iostream>
using namespace std;
void main()
{cout<< "hello!"<< endl;
}
如果不用using namespace std;这句,那么用如下
std::cout << "hello!"<<std::endl;
复制代码

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

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

相关文章

Cloudera-Manager 与 原生集群 免密登录问题

原生集群启动方式&#xff1a; 在Hadoop启动以后&#xff0c;namenode是通过SSH来启动和停止各个节点上的各种守护进程的&#xff0c;这就需要在节点之间执行指令的时候是不需要输入密码的方式&#xff0c;故我们需要配置SSH使用无密码公钥认证的方式。 Cloudera-Manager启动方…

相机标定原理和opencv代码解析

1.单目标定 单应矩阵 设三维空间点的齐次坐标,对应的图像坐标为 他们满足一下关系&#xff1a; s为尺度因子&#xff0c;K为内参矩阵 R和T旋转平移矩阵统称为外参 假设我们提供K个棋盘图像&#xff0c;每个棋盘有N个角点&#xff0c;于是我们拥有2KN个约束方程。与此同时&am…

C++:构造函数和析构函数能否为虚函数

C&#xff1a;构造函数和析构函数能否为虚函数&#xff1f; 简单回答是&#xff1a;构造函数不能为虚函数&#xff0c;而析构函数可以且常常是虚函数。 &#xff08;1&#xff09; 构造函数不能为虚函数 让我们来看看大牛C之父 Bjarne Stroustrup 在《The C Programming Langua…

Linux平台下C++编程

关于Linux下开发应该具备哪些基础知识&#xff0c;应该如何进阶。除了C的基本语法知识外&#xff0c;应该学习哪些内容&#xff0c;更有助于工作和成长。同事给出了他自己的学习思路。具体如下&#xff1a; 1、STL STL作为已经被发明过的轮子&#xff0c;使用起来有很多好处&am…

Hive 大小表关联查询异常

异常原因&#xff1a;mr将数据量小的表识别成了大表&#xff0c;数据量大的识别成小表&#xff0c;导致将数据量大的表加入到内存&#xff0c;导致程序异常处理方法&#xff1a; set hive.execution.enginemr; set hive.mapjoin.smalltable.filesize55000000; set hive.auto.co…

cudaMemcpyToSymbol使用

学到了cudaMemcpyToSymbol竟然还有将数据从host拷贝到global的功能&#xff0c;以前只用过这个函数拷贝到constant memory。拷贝方式的不同是由目的内存申请的方式决定的。 申请的是device内存&#xff0c;cudaMemcpyToSymbol拷贝就是从host拷贝到global memory。 申请的是co…

定义一个结构体指针需要分配存储空间?

前言 问题的来源于在学数据结构的时候&#xff0c;C的语法和C语言的语法竟然不一样。 1.首先函数的参数有两种传递方式&#xff0c;一个是值传递&#xff0c;一个是地址传递。当指针作为参数传递的时候&#xff0c;即为地址传递&#xff0c;但C写的时候需要加&引用符号&a…

内核模式和用户模式

2位x86系统&#xff0c;每个进程的空间是4GB&#xff0c;即地址0x00000000到0xFFFFFFFF。 为了高效调用&#xff0c;Windows会把操作系统的内核数据和代码映射的系统中所有进程的进程空间中。因此4GB空间被划分为两个区域&#xff1a;用户空间和系统空间&#xff0c;默认大小为…

HUE 提交Schedule 时区问题

1.配置如下&#xff0c;每天定时 14:02 启动 2.运行后&#xff0c;任务状态提示&#xff0c;时间变成了06:02:00 3.修改HUE的时区配置 修改后 3.重启 4.然后执行发现&#xff0c;还是不起作用&#xff0c;后排查了一下oozie问题&#xff0c;发现hue的时区配置对oozie无法生效…

高斯日记

大数学家高斯有个好习惯&#xff1a;无论如何都要记日记。 他的日记有个与众不同的地方&#xff0c;他从不注明年月日&#xff0c;而是用一个整数代替&#xff0c;比如&#xff1a;4210 后来人们知道&#xff0c;那个整数就是日期&#xff0c;它表示那一天是高斯出生后的第几…

线程同步之条件变量

一、引言 假设有一个任务&#xff0c;由我和张三共同完成。张三把寄来的文稿初步审阅后放入一个队列&#xff0c;我负责将这个队列中的文稿进行审批&#xff0c;决定刊登与否。张三审阅一份文稿需要15分钟&#xff0c;我处理一个文稿需要2分钟。 如果将张三和我看作两个线程&am…

cuda的global memory介绍

CUDA Memory Model 对于程序员来说&#xff0c;memory可以分为下面两类&#xff1a; Programmable&#xff1a;我们可以灵活操作的部分。Non-programmable&#xff1a;不能操作&#xff0c;由一套自动机制来达到很好的性能。 在CPU的存储结构中&#xff0c;L1和L2 cache都是n…

串口通信参数

串口是一种非常通用的设备通信的协议&#xff08;不要与通用串行总线Universal Serial Bus(USB)混淆&#xff09;。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议&#xff1b;很多GPIB兼容的设备也带有RS-232口。同时&#xff0c;串口通信协议…

马虎的算式

小明是个急性子&#xff0c;上小学的时候经常把老师写在黑板上的题目抄错了。 有一次&#xff0c;老师出的题目是&#xff1a;36 x 495 ? 他却给抄成了&#xff1a;396 x 45 ? 但结果却很戏剧性&#xff0c;他的答案竟然是对的&#xff01;&#xff01; 因为 36 * 495 …

identifier __ldg is undefined

__ ldg&#xff08;&#xff09; 内置仅适用于计算能力3.5&#xff08;或更高版本&#xff09;架构。 这意味着&#xff1a; 必须在计算3.5&#xff08;或更新版本&#xff09;GPU上运行必须针对计算3.5&#xff08;或更新版本&#xff09;的GPU进行编译不能为旧体系结构编译。…

Mybase到期 破解

1.找到mybase安装目录 C:\Users\Zsh\AppData\Local\wjjsoft\nyfedit6 2.打开nyfedit.ini 3. 内容中查找 App.UserLic.FirstUseOn 删除 4.保存打开mybase即可

Android中给按钮同时设置背景和圆角示例代码

前言 最近在做按钮的时候遇到在给按钮设置一张图片作为背景的同时还要自己定义圆角&#xff0c;最简单的做法就是直接切张圆角图作为按钮就可以了&#xff0c;但是如果不这样该怎么办呢&#xff0c;看代码&#xff1a; 下面来看效果图 一、先建一个圆角的shape文件&#xff1a;…

awk使用方法

awk是行处理器: 相比较屏幕处理的优点&#xff0c;在处理庞大文件时不会出现内存溢出或是处理缓慢的问题&#xff0c;通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理&#xff0c;然后输出 awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’…

cude的__ldg使用

一般使用__ldg是更好的选择。通过constant缓存存储的数据必须相对较小而且必须获取同一个地址以便获取最佳性能&#xff0c;相反&#xff0c;只读缓存则可以存放较大的数据&#xff0c;且不必地址一致。 __global__ void transpose2(const real* A, real* B, const int N) {co…

html中contentEditable属性

contentEditable的主要功能是允许用户在线编辑元素中的内容&#xff0c;contentEditable是一个布尔型属性&#xff0c;因此在使用时候赋予初值&#xff0c;默认由inherit状态确定(看其父元素状态) 示例代码&#xff1a; <!doctype html> <html> <head> <…