C++第一篇--关键字以及命名空间


📙 作者简介 :RO-BERRY
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


请添加图片描述


目录

    • 🎄 前言
  • 1. C++关键字(C++98)
  • 2. 命名空间

🎄 前言

C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:

  1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用
    域方面、IO方面、函数方面、指针方面、宏方面等。
  2. 为后续类和对象学习打基础

1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字
ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。
在这里插入图片描述

2. 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的


先来写一段简单C++代码
进入一个语言世界肯定是从hello world开始啦
作为对比先来C语言版本的:

#include<stdio.h>
int main()
{printf("hello world");return 0;
}

再来看C++版本


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

我们都知道在C语言文件中源文件后缀都是.c
但是在.cpp文件里,这两个代码都可以运行
输出结果都是
hello world
可是我们的头文件以及输出方式却完全不一样
C++首先兼容C语言的知识,C语言的知识在C++都可以用
C++还有面向对象,泛型以及对C语言不足的弥补

接下来我们正式介绍C++语言的基础
就是这个头文件以及下面using namespace std;这都是什么,还有这输出方式怎么看不懂


我们先来看一个例子:

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

这个时候运行非常成功
在这里插入图片描述

我们将代码改一下
你会发现只是添加了一个头文件

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

在这里插入图片描述

这个时候运行会出错
看报错我们发现出现的是命名冲突
rand重定义了
命名冲突主要分为

  1. 我们写的跟库冲突
  2. 我们写的互相之间冲突

这种命名冲突在C语言中的经典的问题,项目越大,我们会出现命名冲突就会越多
c++中就出现了命名空间 —> namespace


接下来我们来看namespace的用法:
定义一个命名空间

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

我们会发现运行成功了
命名空间就相当于一堵墙,将rand围起来了,我们就会访问不到,系统会去找那个全局rand,在这里全局的rand是一个函数名,系统就会出现提醒,提示不要这样使用

那我们如何访问我们命名空间里面的rand呢?

#include<stdio.h>
#include<stdlib.h>namespace  bay
{int rand = 0;
}int main()
{printf("hello world");printf("%d",bay::rand);return 0;
}

我们在rand前加入我们的名字bay::
名称后面的冒号叫做(::)域作用限定符
这样我们就可以随便进行重复命名变量,还可以访问我们需要的变量
以后如果想避免冲突就可以采用这种方式了
如果在自己定义的命名空间出现命名冲突怎么办?
我们能想到的开发者也能想到,所以我们在命名空间里可以嵌套命名空间,可以无限套娃
提示:我们在同一个文件定义命名空间以及多个文件中国定义命名空间,如果名称相同,编译器会认为是一个命名空间,不会发生冲突,反而会将他们合并哦

那我们想使用自己定义的命名空间,再使用其中的内容是不想带那个前缀应该怎么办?

我们在头文件下面加上 using namespace 【命名空间名称】;
这样我们就可以随便使用,如果使用和里面的空间相同名称的变量,我们就会默认使用这个命名空间定义的变量,不需要加前缀。

现在我们回到一开始,using namespace std;
这句话的意思就是我们的代码就是在使用std命名空间里面的内容
所以我们使用其中的东西就不用再带上std::这个前缀
std是c++官方库定义的命名空间

#include<iostream>    --->>头文件  输入输出流int main()
{std::cout<<"hello world";     -->>C语言的移位运算符,C++的流插入运算符                     --->>没有带命名空间使用  要加前缀int a=10;double b=11.11;std::cout<<a;std::cout<<b;                     -->>C++能自动识别输出的变量类型std::cout<<a<<b<<"\n";std::cout<<a<<b<<std::endl;    -->>C++可以连续输出,endl相当于C语言里面的\n,在这里等同于换行,endl是C++里面自定义的换行符return 0;
}

我们每次指定命名空间很不方便,但是将命名空间全部展开又有冲突的风险
我们采用指定展开可以解决问题

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

这两个变量就被展开了,在内容里就不用加前缀了
我们就可以指定展开想要的变量或者函数都可以,这样我们的程序就可以变的非常的方便了

我们C语言里面的scanf
在C++里面就是std::cin,又叫做流提取

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

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

相关文章

31一维信号滤波(限幅滤波、中值滤波、均值滤波、递推平均滤波),MATLAB程序已调通,可直接运行。

一维信号滤波&#xff08;限幅滤波、中值滤波、均值滤波、递推平均滤波&#xff09;&#xff0c;MATLAB程序已调通&#xff0c;可直接运行。 31matlab、中值滤波、信号处理 (xiaohongshu.com)

螺旋矩阵[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个m行n列的矩阵matrix&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xf…

性能优化:JIT即时编译与AOT提前编译

优质博文&#xff1a;IT-BLOG-CN 一、简介 JIT与AOT的区别&#xff1a; 两种不同的编译方式&#xff0c;主要区别在于是否处于运行时进行编译。 JIT:Just-in-time动态(即时)编译&#xff0c;边运行边编译&#xff1a;在程序运行时&#xff0c;根据算法计算出热点代码&#xf…

【题解 单调队列优化dp】 简单的加法乘法计算题

题目描述&#xff1a; 分析&#xff1a; 由于对于每一步而言&#xff0c;我们都需要的是最小步数 所以我们很显然的可以写出一个dp方程&#xff1a; 设 f [ i ] f[i] f[i]表示达到i时的最小步数 我们有两种操作&#xff0c;也就是说我们可以通过一下两种方式转移过来&#xff…

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET “/**“

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET "/**" 问题发现问题解决 问题发现 WebTestClient 是 Spring WebFlux 框架中提供的用于测试 Web 请求的客户端工具。它可以不用启动服务器&#xff0c;模拟发送 HTTP 请求并验证服务器的响…

力扣刷题 day54:10-24

1.十进制整数的反码 每个非负整数 N 都有其二进制表示。例如&#xff0c; 5 可以被表示为二进制 "101"&#xff0c;11 可以用二进制 "1011" 表示&#xff0c;依此类推。注意&#xff0c;除 N 0 外&#xff0c;任何二进制表示中都不含前导零。 二进制的反…

CPU眼里的C/C++:1.2 查看变量和函数在内存中的存储位置

写一个很简单的 c 代码&#xff0c;打印一些“地址”&#xff0c; 也就是变量、函数的“存储位置”&#xff1a;当程序被加载到内存后&#xff0c;它们具体是存在哪里&#xff0c;可以用精确的数值来表示&#xff0c;这就是内存地址。 https://godbolt.org/z/Ghh9ThY5Y #inc…

Java基础篇 | Java8流式编程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型&#xff0c;Transformer模型有两个显著的优势&#xff1a; Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率。 在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

Ai写作创作系统ChatGPT网站源码+图文搭建教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

一文了解AIGC与ChatGPT

关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、AIGC简介 1.AIGC基础 (1)AIGC是什么 AIGC是人工智能图形计算的缩写&#xff0c;是一种基于图形处理器&#xff08;GPU&#xff09;的计算技术&#xff0c;可以加速各种…

业务出海、高效传输、动态加速,尽在云栖大会「CDN与边缘计算」专场

2023杭州云栖大会&#xff0c;即将热力来袭。 一场云计算盛会&#xff0c;500前沿话题&#xff0c;3000科技展品&#xff0c;与阿里云一起&#xff0c;共赴72小时的Tech沉浸之旅。 今日&#xff0c;「CDN与边缘计算」Tech专场&#xff0c;重磅议题抢先知晓&#xff01; 01 「…

Elasticsearch的增删查改详细操作

目录标题 一、创建索引二、查看索引三、修改索引四、删除索引五、向索引增加数据 一、创建索引 单独创建索引 PUT /test1 # test1 为索引名称自定义{"settings":{ # 创建index 需要有效的xcontent字节及Json格式 否则创建不成功 "index":{"number_…

log函数解释

log函数是指数函数y bx 的反函数,用于求数字以某个数为底的对数。log函数的定义:设b>0,b≠1,对于任意实数x > 0,如果存在唯一的实数y,使得 b^y x,则称y为以b为底x的对数,记为:y log_b(x)这里b称为对数的底数。对数运算的底数通常取10和e。常见的对数运算有:1. 常用对数…

前后端交互—跨域与HTTP

跨域 代码下载 同源策略 同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。 MDN 官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这 是一个用于隔离潜在恶意文件的重要安全机制。 通俗的理解:浏览器规定&a…

测试C#调用Windows Media Player组件

新建基于.net framework的Winform项目&#xff0c;可以通过添加引用的方式选择COM组件中的Windows Media Player组件&#xff0c;如下图所示&#xff1a;   也可以在VS2022的工具箱空白处点右键&#xff0c;选择“选择项…”菜单。   在弹出的选择工具箱项窗口中&#xf…

小样本学习(2)--LibFewShot使用

目录 一、LibFewShot安装 1、LibFewShot代码仓库 2、配置环境 3、测试安装是否正确 二、LibFewShot结构 1、config文件夹 2、core文件夹 3、reproduce文件夹 4、results文件夹 三、如何训练自己的数据集 1、调用主配置文件 2、修改主配置文件 一、LibFewShot安装…

Html -- 文字时钟

Html – 文字时钟 文字时钟&#xff0c;之前在Android上实现了相关效果&#xff0c;闲来无事&#xff0c;弄个网页版的玩玩。。。直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

功能基础篇8——图形用户界面

图形用户界面 Graphics User Interface&#xff0c;GUI&#xff0c;图形用户界面 Ubuntu GUI Command Line Interface&#xff0c;CLI&#xff0c;命令行界面 Centos CLI tkinter GUI&#xff0c;Python标准库 from tkinter import ttk, Tkroot Tk() frm ttk.Frame(…

Appium移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…