【初识C++】(关键字,命名空间)

news2024/9/29 23:26:52

文章目录

  • 一、C++中的关键字
  • 二、命名空间
    • 1.命名空间规则
      • 展开命名空间域 和 #include 的区别
    • 2.正确使用命名空间
  • 三、C++中的输入和输出


一、C++中的关键字

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、命名空间

命名空间是对于全局变量来说,我们在定义变量或函数时,函数名可能会和库中的函数名产生冲突。
比如:
在这里插入图片描述
报错的意思是:库中存在rand这个函数,而我又定义一个rand这个变量,所以会产生名字的冲突。

为了解决这个问题,C++引入了命名空间这个概念。

而与该命名空间的关键字是:namespace

1.命名空间规则

命名空间搜索规则:局部域->全局域->命名空间域(如果不指定,不会主动去搜索)

首先引入域的概念,学习c语言会知道,有一个域叫做作用域,比如局部作用域和全局作用域。
来看下面的代码:

int a = 10;

int main()
{
	int a = 0;

	return 0;
}

我分别要输出局部作用域的a和全局作用域的a该如何输出?

使用域作用限定符

域作用限定符是: “域名+::” ,两个冒号。
比如这样:

int a = 10;

int main()
{
	int a = 0;
	printf("%d\n", a);
	printf("%d\n", ::a);
	return 0;
}

对于全局作用域来说,想要获取a,直接在a前面加上两个冒号即可,全局域的域名可以省略。

访问命名空间域的方法:
1.展开命名空间域

看下面的代码:

namespace dzt
{
	int a = 5;
}

//int a = 10;

int main()
{
	//int a = 0;
	printf("%d\n", a);
	return 0;
}

这样的代码,假如要输出a,是不行的,编译器报的错误是:
”未声明的标识符“
在这里插入图片描述
所以我们想要获得命名空间域的内容,

using namespace dzt;

我们把这句代码加入到命名空间dzt下面就可以执行了。
这句代码的意思是:展开我的命名空间域dzt。在这里插入图片描述
此时编译不会出现问题。

展开命名空间域 和 #include 的区别

在编译过程中:

展开命名空间域是编译器会去命名空间域搜索。

#include 是将包含的头文件的内容拷贝过来。

二者不同,注意区分。

方法2:指定命名空间对象

//命名空间后面跟名字,这个名字是随便起的。
namespace dzt
{
	int a = 5;
}

//int a = 10;

int main()
{
	//int a = 0;
	printf("%d\n", dzt::a);
	return 0;
}

只需要使用 “域名::指定变量或函数” 这样的访问方式即可。

注意:对于命名空间域来说,展开了命名空间域后,相当于变成全局作用域了
比如:

int a = 10;

namespace dzt
{
	int a = 5;
}

using namespace dzt;

int main()
{
	printf("%d\n", a);
	return 0;
}

有一个全局变量a = 10,现在展开了命名空间域后,相当于全局域有a = 10 和a = 5,此时就会报a不明确的问题。

因为编译器不清楚这个a 到低是全局作用域的a还是命名空间域的a。

可以理解成,命名空间域就像是一堵围墙,一旦展开,相当于把围墙拆掉,围墙内的所有东西便会暴露出来。

总结:不要轻易展开命名空间域。

还有一个需要注意的点:

在不同的文件中创建相同名字的命名空间域,会自动将这些名字相同的命名空间域合并。

2.正确使用命名空间

上面讲过了如何使用命名空间的两种方法。
这里重述一遍:
**
1.使用using namespace 命名空间名称 引入
2.加命名空间名称及作用域限定符
3.使用using将命名空间中某个成员引入**

在之后的学习中,推荐使用第二种和第三种的结合

比如:

namespace dzt
{
	// 命名空间中可以定义变量/函数/类型
	int a = 0;
	int b = 1;

	int Add(int left, int right)
	{
		return left + right;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};
}

using dzt::a

int main()
{
	printf("%d\n", a);
	return 0;
}

在一个命名空间域中,定义了多个变量和结构体以及函数。我们想访问该命名空间域的内容时,尽量不使用完全展开的方法,可以指定搜索某个变量即可。

总结:命名空间的出现是为了解决c语言的命名冲突问题。

三、C++中的输入和输出

C++中使用cout来进行输出,cin进行输入。
比如:

#include<iostream>
//引入库的头文件,该头文件包含cin,cout等关键字
using namespace std;
//让编译器可以去库里面搜索

int main()
{
	double a = 10;
	//cin包括但不限于scanf
	//  >>是流提取运算符
	cin >> a ;
	//cout包括但不限于printf
	// <<是流插入运算符
	cout << a << endl;
	return 0;
}

在C++中的cin和cout是会自动识别类型的,关于如何自动识别,涉及到函数重载问题,后续会讲到。

由于C++是包含C的,所以cin和cout这种输入输出的效率会比C低一点点,因为cin和cout会自动识别类型,涉及到更复杂的实现。

在不同的情况下,可以cin,cout,scanf,printf结合使用。

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

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

相关文章

window 和 linux 安装 Tesseract-OCR

一、 Window 安装 Tesseract-OCR 1.安装 tesseract-ocr-w64-setup-5.3.1.20230401.exe 下载地址&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 2. 配置 PATH 环境变量 3. 配置TESSDATA_PREFIX 环境变量 4. 在 cmd 中查询是否安装成功 5. 在安装的目录 tessda…

算法刷题总结 (七) 双指针

算法总结7 双指针一、双指针的概念1.1、什么是双指针&#xff1f;1.2、常见类型1.2.1、快慢指针1.2.2、左右端点指针1.2.3、区间指针 - 滑动窗口汇总二、经典例题2.1、快慢指针&#xff08;1&#xff09;、链表判环141. 环形链表142. 环形链表 II287. 寻找重复数876. 链表的中间…

人工智能学习07--pytorch15(前接pytorch10)--目标检测:FPN结构详解

FPN&#xff1a;用于目标检测的特征金字塔网络 backbone:骨干网络&#xff0c;例如cnn的一系列。&#xff08;特征提取&#xff09; (a)特征图像金字塔 检测不同尺寸目标。 首先将图片缩放到不同尺度&#xff0c;针对每个尺度图片都一次通过算法进行预测。 但是这样一来&#…

第二章:HTML CSS 网页开发基础(一)

一、HTML HTML&#xff1a;是一种网页制作标注性语言。HTML通过浏览器的翻译将页面呈现给用户。 1、1 HTML文档结构 HTML文档由4个主要标记组成&#xff0c;<html>、<head>、<title>、<body> <html>标记 该标记是所有html文件的开头&a…

[STM32F103C8T6]DMA

DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU&#xff0c;在这个时间中&#xff0c;CPU对于内存的工作来说就无法使用。 我自己…

实验设备管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87682549 更多系统资源库…

构建新摩尔定律下的算力分发网络

摩尔定律最早由英特尔创始人之一戈登摩尔在1965年提出&#xff0c;他认为集成电路上可以容纳的晶体管数目在大约每经过18到24个月便会增加一倍。20年后的今天&#xff0c;面对日新月异的社会和突飞猛进的数字化需求&#xff0c;摩尔定律也随着社会的进步而被赋予了新的定义。Li…

第八章 法律关系

目录 第一节 法律关系的概念 一、法律关系的定义与特征 二、法律关系的种类 &#xff08;一&#xff09;纵向&#xff08;隶属&#xff09;的法律关系和横向&#xff08;平权&#xff09;的法律关系 &#xff08;二&#xff09;单向&#xff08;单务&#xff09;法律关系、双…

基于ITIL搭建公司IT治理服务框架

ITIL帮助组织标准化其IT服务和流程。ITIL文档包括各种政策、程序和指南&#xff0c;帮助IT团队向客户提供优质的服务。 根据ITIL框架的五个阶段&#xff0c;ITIL文档被广泛分类为不同的类别。 这些阶段包括服务战略、服务设计、服务过渡、服务操作和持续服务改进。每个类别都有…

android内存泄漏检测,Android内存泄露检测之LeakCanary的使用

为了能够简单迅速的发现内存泄漏&#xff0c;Square公司基于MAT开源了LeakCanary。使用LeakCanary&#xff0c;在内存泄漏后&#xff0c;通过分析引用链可以分析内存泄漏的原因&#xff0c;LeakCanary用于检测Activity、Fragment的内存泄漏。 下面通过一些实际案例来进行分析。…

如何替换spring boot中spring框架的版本

背景 我开源的一个项目中&#xff0c;有朋友提到存在Spring Framework 身份认证绕过漏洞(CVE-2023-20860)。 解决方案是升级spring 框架版本&#xff1a; Spring Framework 5.3.X 系列用户建议升级Spring Framework到5.3.26及以上安全版本修复该漏洞Spring Framework 6.0.X 系…

HashMap 学习笔记

HashMap&#xff1a; 为什么经常深入考察&#xff1f; 基于java写的代码会访问很多东西&#xff0c;比如数据库&#xff0c;缓存&#xff0c;消息中间件。 HashMap数据结构 底层是数组 原本已经有很多个位置了 原本是取模但是优化成了性能更高的hash&(n-1) 让哈希值…

【性能测试】5年测试老鸟,总结性能测试基础到指标,进阶性能测试专项......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 性能测试是为了评估…

java 接口,接口的特性,接口实现多态,面向接口编程

package cn.zy.cellphone; /**接口是一种引用数据类型。使用interface声明接口&#xff0c;形式* 形式:public interface 接口名称{}* 接口不能拥有构造方法&#xff0c;不能用于创建对象*接口可以多继承。一个接口可以继承多个其他接口*列如&#xff1a;public interface Broa…

任何人都可以学习车载测试吗?车载测试有什么门槛?

1、车载测试是什么&#xff1f; 车载测试分很多种&#xff0c;有软件测试、硬件测试、性能测试、功能测试等等&#xff0c;每一项测试的内容都不一样&#xff0c;我们所说的车载测试主要指的是汽车软件的功能测试&#xff0c;也就是针对汽车实现的某一个功能&#xff0c;而进行…

windows平台多版本nodejs共存工具nvm-windows 中文文档

2023年4月14日11:11:49 官网地址&#xff1a;https://github.com/coreybutler/nvm-windows 下载地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases nodejs版本列表 https://nodejs.org/en/download/releases PS C:\Users\pc\Desktop> nvm -h Running ve…

关于测试,我发现了哪些新大陆

关于测试 平常也只是听说过一些关于测试的术语&#xff0c;但并没有使用过测试工具。偶然看到编程老师在课堂上使用龙测为我们展示了一波测试的相关操作&#xff0c;我发现了一些新大陆&#xff0c;这篇文章就记录一下有关测试的相关操作。 开启测试之旅 进入官网了解到 龙测…

java学习之接口二

目录 一、接口vs继承 一、继承 二、接口 二、接口多态特性 一、多态参数 二、多态数组 三、多态传递 三、接口练习 一、接口vs继承 一、继承 package com.hspedu.interface_;public class ExtendsVsInterface {public static void main(String[] args) {LittleMonkey…

5G物理层信道pdcch说明(留档)

网络七层协议OSI是一个开放性的通信系统互连参考模型。 它是国际标准组织制定的一个指导信息互联、互通和写作的网络规范。 开放&#xff1a;是指只要遵循OSI标准&#xff0c;位于世界的任何地方的任何系统之间都可以进行通讯&#xff1b;开放系统&#xff1a;是指遵循互联网协…

【结构型模式】装饰者模式

文章目录优秀借鉴1、概述2、结构3、实现方式3.1、案例引入3.2、实现步骤3.3、案例实现4、装饰者模式优缺点5、结构型模式对比5.1、装饰者模式和代理模式5.2、装饰者模式和适配器模式6、应用场景优秀借鉴 装饰模式 — Graphic Design Patterns设计模式 | 装饰者模式及典型应用黑…