C++ (Chapter 1)

C++ (一)

1.C++的命名空间

先来看一个C语言的例子:

下面这段代码是可以正常运行的.

#include<stdio.h>
int rand = 0;
int main()
{printf("%d \n", rand);return 0;
}

但是,包含了一个头文件之后,甚至无法通过编译.

#include<stdio.h>
#include<stdlib.h>
int rand = 0;
int main()
{printf("%d \n", rand);return 0;
}

在这里插入图片描述

根据报错信息来看,rand本来是stdlib库中的一个库函数,但是这里我们也创建了一个叫做rand的变量,所以这里在执行printf语句时,就无法辨别rand到底是哪个了.

假若有人在项目中恰好就将某个变量名或者函数名设置成了与库中一样的名字,可就惨了,因为C语言本身是没有办法自己去解决这个问题的,只能我们主动避免.

命名空间的定义:所以为了解决上述出现的情况,C++中出现了命名空间.我们可以主动将我们声明的变量和函数等都写入这个命名空间中:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%p \n", rand);return 0;
}

执行结果:
在这里插入图片描述

注意:当我们想要访问的是命名空间内的变量或函数时,需要在变量/函数名之前加上 命名空间名字::,否则就是到命名空间之外去寻找该变量/函数,例如:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%d \n", Space::rand);return 0;
}

执行结果:
在这里插入图片描述

例如:在下面这段代码中,在命名空间之内定义了一个Add函数,假若我们就只写一个 Add(1,3);,这样是会报错的,因为没有在其之前指明 Space::,所以编译器会默认到命名空间之外去找, 而在命名空间Space之外并没有Add函数,所以就报错.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Add(1, 3);return 0;
}

修正方案:

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Space::Add(1, 3);return 0;
}

命名空间的嵌套以及访问

假如命名空间之内还有一个命名空间,我们应当如何去访问最里层命名空间里的内容呢?

例如:访问如下命名空间里的Div函数.

#include<stdio.h>
#include<stdlib.h>
namespace Space // 外层
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 //里层{void Div(int x, int y){printf("%d", x - y);}}
}

访问命名空间:方法一:加命名空间名称以及作用域限定符.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
int main()
{printf("%d \n", Space::rand);Space::Space1::Div(1, 3);return 0;
}

访问命名空间:方法二:使用using将命名空间某个成员引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
using Space::Space1::Div;
int main()
{printf("%d \n", Space::rand);Div(1, 3);return 0;
}

访问命名空间:方法三:使用using namespace 命名空间名称 引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
//引入命名空间Space1
using namespace Space::Space1; 
//引入命名空间Space
using namespace Space;
int main()
{printf("%d \n", Space::rand);Add(1, 3);Div(1, 3);return 0;
}

2.C++的输入和输出

先来看看C++是如何输入和输出的吧!

#include<iostream>
using namespace std;
int main()
{int a = 0;cout << "hello world" << endl;cin >> a;return 0;
}

注意:std是C++标准库的命名空间名称,C++将标准库的定义实现都放到了这个命名空间中,而这里的coutendl都是在std标准库中定义的,有了 using namespace std;语句,就可以直接访问该定义了,不需要我们再手动加上命名空间名称和作用域限定符了.

这里特别说明:

  • 使用cout进行输出时,必须包含iostream头文件.
  • coutcin以及endl都是包含在iostream中的.

std命名空间的使用惯例:

  1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +using std::cout展开常用的库对象/类型等方式。

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

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

相关文章

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…

Python之函数详解

一、函数的定义与调用 函数定义语法&#xff1a; def 函数名([参数列表]): ‘’‘注释’‘’ 函数体 注意事项 函数形参不需要声明类型&#xff0c;也不需要指定函数返回值类型即使该函数不需要接收任何参数&#xff0c;也必须保留一对空的圆括号 括号后面的冒号必不可少函数…

IntelliJ IDEA 2023.1 版本可以安装了

Maven 的导入时间更加快了。 收到的有邮件提醒安装。 安装后的版本&#xff0c;其实就是升级下&#xff0c;并没有什么主要改变。 IntelliJ IDEA 2023.1 版本可以安装了 - 软件技术 - OSSEZMaven 的导入时间更加快了。 收到的有邮件提醒安装。 安装后的版本&#xff0c;其实就是…

Lumen/Laravel - 数据库读写分离原理 - 探究

1.应用场景 主要用于学习与探究Lumen/Laravel的数据库读写分离原理。 2.学习/操作 1.文档阅读 chatgpt & 其他资料 数据库入门 | 数据库操作 | Laravel 8 中文文档 入门篇&#xff08;一&#xff09;&#xff1a;数据库连接配置和读写分离 | 数据库与 Eloquent 模型 | La…

OrcaTerm AI

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

为什么选择虚拟展会展览?了解虚拟展会展览的应用领域

引言&#xff1a; 相较于传统的实体展览&#xff0c;虚拟展会展览具有吸引力和便捷性&#xff0c;能够在全球范围内进行宣传活动。这种创新形式不仅能够降低成本、扩大受众范围&#xff0c;还能够提供没有过的互动性和数据分析。 一&#xff0e;虚拟展会展览简介 虚拟展会展览…

[RoarCTF 2019]Easy Calc - RCE(函数输出)+参数waf绕过(PHP字符串解析特性)

[RoarCTF 2019]Easy Calc 1 解题流程2 思考总结1 解题流程 打开页面让我们输入,输了没反应(执行报错),F12发现js有代码$(#calc).submit(function(){$.ajax(

【23-24 秋学期】NNDL 作业3

过程推导 - 了解BP原理数值计算 - 手动计算&#xff0c;掌握细节代码实现 - numpy手推 pytorch自动 对比【numpy】和【pytorch】程序&#xff0c;总结并陈述。激活函数Sigmoid用PyTorch自带函数torch.sigmoid()&#xff0c;观察、总结并陈述。激活函数Sigmoid改变为Relu&#…

身份证读卡器跟OCR有何区别?哪个好?

二代身份证读卡器&#xff08;以下简称读卡器&#xff09;和OCR&#xff08;光学字符识别&#xff09;是两种常见的身份证信息获取技术&#xff0c;它们在原理、功能和应用方面存在一些区别。下面将详细介绍二者的区别并探讨哪个更好。 1. 原理&#xff1a; - 读卡器&#xff…

CSS图文悬停翻转效果完整源码附注释

实现效果截图 HTML页面源码 <!DOCTYPE html> <html><head><meta http-equiv="content-type

【AntDesign】多环境配置和启动

环境分类&#xff0c;可以分为 本地环境、测试环境、生产环境等&#xff0c;通过对不同环境配置内容&#xff0c;来实现对不同环境做不同的事情。 AntDesign 项目&#xff0c;通过 config.xxx.ts 添加不同的后缀来区分配置文件&#xff0c;启动时候通过后缀启动即可。 config…

Centos7安装Gitlab--gitlab--ee版

1 安装必要依赖 2 配置GitLab软件源镜像 3 下载安装GitLab 4 查看管理员root用户默认密码 5 登录GitLab 6 修改密码 7 gitlab相关命令 1 安装必要依赖 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemctl enable sshd sudo systemctl sta…

antd Form shouldUpdate 关联展示 form 数组赋值

form 数组中嵌套数值更新 注意&#xff1a;数组是引用类型 项目需求&#xff0c;表单中包含多个产品信息&#xff0c;使用form.list 数组嵌套&#xff0c;提货方式如果是邮寄展示地址&#xff0c;如果是自提&#xff0c;需要在该条目中增加两项 代码如下&#xff1a;// An hi…

K8S云计算系列-(4)

K8s Dashboard UI 部署实操 Kubernetes实现的最重要的工作是对Docker容器集群统一的管理和调度&#xff0c;通常使用命令行来操作Kubernetes集群及各个节点&#xff0c;命令行操作非常不方便&#xff0c;如果使用UI界面来可视化操作&#xff0c;会更加方便的管理和维护。如下为…

优盘无法格式化?分享简单解决方法!

“我的优盘插入了一个带病毒的电脑中&#xff0c;现在优盘也中毒了&#xff0c;想把它格式化。但是操作的时候却显示优盘无法格式化&#xff0c;这种情况应该怎么办呢&#xff1f;” 优盘&#xff0c;又称USB闪存驱动器。由于其体积小且方便携带&#xff0c;受到广大电脑用户的…

elasticsearch 8.5.3问题记录

一&#xff1a;解决 elasticsearch 高版本 warning: ignoring JAVA_HOMEC:\Program Files\Java\jdk-11&#xff1b; using bundled JDK if defined JAVA_HOME (set JAVA_HOME%JAVA_HOME%; )示例版本Elasticsearch 8.5.3 可以与 JDK 11 兼容&#xff0c;但不支持 JDK 17。确保选…

亏损8.5万亿,美芯将敞开供应存储芯片,试图压制中国存储芯片

近期美国表示将给与韩国存储芯片无限期豁免&#xff0c;允许它们将先进芯片设备运到它们在中国的存储芯片&#xff0c;这意味着这两家韩国存储芯片企业可以敞开对中国供应存储芯片了&#xff0c;为何美国会突然放开呢&#xff1f; 一方面是韩国存储芯片已陷入窘境&#xff0c;据…

【算法-贪心】无重叠区间-力扣 435 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Blender:对模型着色

Blender&#xff1a;使用立方体制作动漫头像-CSDN博客 上一步已经做了一个头像模型&#xff0c;我做的太丑了&#xff0c;就以这个外星人头像为例 首先切换到着色器编辑器 依次搜索&#xff1a;纹理坐标、映射、分离xyz和颜色渐变 这里的功能也是非常丰富和强大&#xff0c…