C++入门基础(上)
一. C++发展历史
C++参考文档: https://legacy.cplusplus.com/reference/https://zh.cppreference.com/w/cpphttps://en.cppreference.com/w/说明:第一个链接不是C++官方文档,标准也只更新到C++11,但是以头文件形式呈现,内容比较易看好懂。后两个链接分别是C++官方文档的中文版和英文版,信息很全,更新到了最新的C++标准,但是相比第一个不那么易看;几个文档各有优势,我们结合着使用。
二. C++语法的初步认识
2.1 C++的第一个程序
C++的语言是兼容C语言的,我们在C语言中写的hello world在C++中也是可行的,但是正确的应该是C++中需要把定义文件代码后缀改为.cpp,vs编译器看到是.cpp就会调用C++编译器编译。
// test.cpp
// 这⾥的std cout等我们都看不懂,没关系,下⾯我们会依次讲解
#include<iostream>
using namespace std;
int main()
{cout << "hello world\n" << endl;return 0;
}
2.2 命名空间
(1)namespace的价值

(2)namespace的定义
1.上面使用C语言出现了重命名的问题,但是我们可以在C++中使用namespace关键字来处理这个问题。
• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即 可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变 量,所以下面的rand不在冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变 量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全 局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。•namespace只能定义在全局,当然他还可以嵌套定义。•项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。• C++标准库都放在一个叫std(standard)的命名空间中。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
namespace zda
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{// 这⾥默认是访问的是全局的rand函数指针printf("%p\n", rand);// 这⾥指定bit命名空间中的randprintf("%d\n", zda::rand);return 0;
}
2.然后对于我们的namespace关键字还可以嵌套使用,我也通过代码的形式给大家展示出来:
namespace zda
{namespace zda1{int a = 10;int Add(int b, int c){return b + c;}}namespace zda2{int a = 20;int Add(int b, int c){return b + c;}}
}
int main()
{printf("%d\n", zda::zda1::a);//zda1printf("%d\n", zda::zda2::a);//zda2printf("%d\n", zda::zda1::Add(1, 2));//zda1printf("%d\n", zda::zda1::Add(3, 2));//zda2return 0;
}
上面的代码我们可以清楚的看到我们定义了一个名为zda的域,同时又在这个域中又嵌套了zda1和zda2,同时我们在zda1和zda2中的变量名称也是一样的,但是我们最终在调用的时候结果是不一样的,所以namespace中是可以嵌套的,并且是互不影响的,我们调用哪个,哪个就会被我们使用,::是域的作用限定符。
3.下面一个点就是在多个项目文件中定义的同名namespace时,编译器也会认为是一namespace不会产生冲突。并且当main函数在调用的时候,如果namespace没有赋予main函数权限的话,那么main函数就不会调用namespace里面的数据等。
(3)命名空间的使用

namespace zda
{int a = 0;int b = 1;
}
// 指定命名空间访问
int main()
{printf("%d\n", zda::a);return 0;
}// using将命名空间中某个成员展开
using zda::b;
int main()
{printf("%d\n", zda::a);printf("%d\n", b);return 0;
}// 展开命名空间中全部成员
using namespace zda;
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}
上面的大妈分别是指定命名空间,我们在调用的时候使用::域作用限定符,就不会出现编译报错;看第二种情况,如果说在一个域中我们后面要经常使用,那么可使用using将命名空间某个成员展开,这样我们在后续的使用中就不用每次通过命名空间来调用;第三种情况就是,展开命名空间的全部成员,但是通常我们不建议大家这样做的,因为冲突的风险会很大。
2.3 C++的输入和输出
• <iostream> 是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。• std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流。• std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流。• std::endl 是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。• <<是流插入运算符, >>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)• 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要守动指定格式,C++的输入输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是 C++的流能更好的支持自定义类型对象的输入输出。• IO流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这里我们只能简单认识一下C++ IO流的用法,后面我们会有专门的一个章节来细节IO流库。• cout/cin/endl等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。• 一般日常练习中我们可以using namespace std,实际项目开发中不建议using namespace std。• 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream>间接包含了。vs系列编译器是这样的,其他编译器可能会报错。
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
int main()
{int a = 0;double b = 0.1;char c = 'x';cout << a << " " << b << " " << c << endl;std::cout << a << " " << b << " " << c << std::endl;scanf("%d%lf", &a, &b);printf("%d %lf\n", a, b);// 可以⾃动识别变量的类型cin >> a;cin >> b >> c;cout << a << endl;cout << b << " " << c << endl;return 0;
}
相关文章:
C++入门基础(上)
一. C发展历史 C的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作…...
Nacos源码—4.Nacos集群高可用分析四
大纲 6.CAP原则与Raft协议 7.Nacos实现的Raft协议是如何写入数据的 8.Nacos实现的Raft协议是如何选举Leader节点的 9.Nacos实现的Raft协议是如何同步数据的 10.Nacos如何实现Raft协议的简版总结 8.Nacos实现的Raft协议是如何选举Leader节点的 (1)初始化RaftCore实例时会开…...
互联网大厂Java求职面试:AI与云原生下的系统设计挑战-3
互联网大厂Java求职面试:AI与云原生下的系统设计挑战-3 第一轮提问:从电商场景切入,聚焦分布式事务与库存一致性 面试官(严肃):郑薪苦,你最近在做电商系统的促销活动,如何处理分布…...
【KWDB创作者计划】_通过一篇文章了解什么是 KWDB(KaiwuDB)
文章目录 📋 前言🎯 关于 KaiwuDB 组成🎯 KaiwuDB 核心架构和功能图🧩 KaiwuDB 2.0 版本核心特性🧩 KaiwuDB Lite 版本介绍 🎯 KaiwuDB 产品优势🎯 KaiwuDB 应用场景🧩 典型应用场景…...
双系统电脑中如何把ubuntu装进外接移动固态硬盘
电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…...
Flink + Kafka 构建实时指标体系的实战方法论
本文聚焦于如何利用 Flink 与 Kafka 构建一套灵活、可扩展的实时指标体系,特别适用于用户行为分析、营销漏斗转化、业务实时看板等场景。 一、为什么要构建实时指标体系? 在数字化运营趋势下,分钟级指标反馈能力变得尤为重要: ✅ 营销投放实时监控 CTR / CVR ✅ 业务增长实…...
RLOO:将多次其他回答的平均reward作为baseline
RLOO:将多次其他回答的平均reward作为baseline TL; DR:基于 REINFROCE 算法,对于同一 prompt 在线采样 k k k 次,取除自己外的其他 k − 1 k-1 k−1 条回答的平均 reward 作为 baseline。 从 PPO 到 REINFORCE 众所周知&…...
在 Laravel 12 中实现 WebSocket 通信时进行身份验证
在 Laravel 12 中实现 WebSocket 通信时,若需在身份验证失败后主动断开客户端连接,需结合 频道认证机制 和 服务端主动断连操作。以下是具体实现步骤: 一、身份验证流程设计 WebSocket 连接的身份验证通常通过 私有频道(Private …...
Transformer 与 LSTM 在时序回归中的实践与优化
🧠 深度学习混合模型:Transformer 与 LSTM 在时序回归中的实践与优化 在处理多特征输入、多目标输出的时序回归任务时,结合 Transformer 和 LSTM 的混合模型已成为一种有效的解决方案。Transformer 擅长捕捉长距离依赖关系,而 LS…...
Java注解
注解的底层原理: 注解的本质是一种继承自Annotation类的特殊接口,也被称为声明式接口,编译后会转换为一个继承自Anotation的接口,并生成相应的字节码文件。 注解的具体实现类是Java运行时生成的动态代理对象(接口本身…...
Linux USB Gadget | 框架 / 复合设备实践 / Configfs 配置
注:本文为“Linux USB Gadget ”相关文章合辑。 图片清晰度受引文原图所限。 略作重排,未整理去重。 如有内容异常,请看原文 Linux USB Gadget 框架概述 2018-04-11 haoxing990 本文记录我在公司 Gadget 相关的驱动开发开发过程中的感悟。…...
Spring Boot之MCP Client开发全介绍
Spring AI MCP(模型上下文协议,Model Context Protocol)客户端启动器为 Spring Boot 应用程序中的 MCP 客户端功能提供了自动配置支持。它支持同步和异步两种客户端实现方式,并提供了多种传输选项。 MCP 客户端启动器提供以下功能: 多客户端实例管理 支持管理多个客户端实…...
nnUNet V2修改网络——暴力替换网络为Swin-Unet
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 Swin-Unet是一种基于纯Transformer的U型编码器-解码器架构,专为医学图像分割任务设计。传统方法主…...
【计网】ICMP、IP、Ethernet PDU之间的封装关系
TCP/IP体系结构 应用层RIP、OSPF、FTP运输层TCP、UDP网际层IP、ARP、ICMP网络接口层底层协议(Ethernet) 数据链路层 Ethernet报文格式 6Byte6Byte2Byte46~1500Byte4Byte目的MAC地址源MAC地址类型/长度数据FCS 其中,类型 / 长度值小于 1536…...
JSON 转换为 Word 文档
以下是一个在 Spring Boot 中实现 JSON 转 Word 的示例: 首先,需要在项目中引入相关的依赖,如 json 和 Apache POI 等。在 pom.xml 文件中添加以下内容: <!-- JSON 相关依赖 --> <dependency><groupId>com.fast…...
Kotlin Lambda优化Android事件处理
在 Kotlin 中,Lambda 表达式为 Android 事件处理提供了更加简洁优雅的解决方案。通过合理使用 Lambda,可以显著减少模板代码,提升代码可读性。以下是具体实现方式和应用场景: 一、传统方式 vs Lambda 方式对比 1. 按钮点击事件处…...
Springboot接入Deepseek模型
#实现功能:上下文对话、对话历史、清除会话 #本次提供项目源码压缩包,直接下载解压后导入idea即可正常使用 下载好源码后请在DeepSeek 开放平台中注册账号并充值1块余额,注意充值和API keys,API keys包含了秘钥,获取后复制到项目…...
量子跃迁:破解未来计算的“时空密码”
引言:当量子比特撕裂“摩尔定律”的枷锁 根据德勤《Tech Trends 2025》报告,量子计算机可能在5-20年内成熟,其算力将直接威胁现有加密体系。这不仅是技术的跃迁,更是一场重构数字世界规则的“密码战争”。从谷歌的53量子比特悬铃…...
Spring MVC入门
本内容采用最新SpringBoot3框架版本,视频观看地址:B站视频播放 1. MVC概念 MVC是一种编程思想,它将应用分为模型(Model)、视图(View)、控制器(Controller)三个层次,这三部分以最低的耦合进行协同工作,从而提高应用的可扩展性及可维护性。 模型(Model) 模型层主要…...
【25软考网工】第五章(6)TCP和UDP协议、流量控制和拥塞控制、重点协议与端口
目录 一、TCP和UDP协议 1. TCP和UDP报文格式 1)TCP传输控制协议 2)UDP用户数据报协议 3)TCP与UDP对比 4)TCP和UDP类比 5)应用案例 例题1#可靠传输服务层 例题2#提供可靠传输功能层 6)TCP报文格式…...
如何修改 JAR 包中的源码
如何修改 JAR 包中的源码 前言一、准备工作二、将 JAR 当作 ZIP 打开并提取三、重写 Java 类方法 A:直接替换已编译的 .class方法 B:运行时类路径优先加载 四、修改 MyBatis(或其他)XML 资源五、重新打包 JAR(命令行&a…...
【Linux网络】应用层协议HTTP
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 HTTP 协议 认识 URL urlencode 和 urldecode HTTP 协议请求与响应格式 H…...
高并发架构及场景解决方案
高并发 一、什么是高并发? 高并发是指系统在短时间内能够同时处理大量用户请求或任务的能力,是衡量分布式系统、互联网应用性能的重要指标之一。它的核心目标是确保系统在高负载下仍能稳定、高效运行,同时提供良好的用户体验。 1、高并发系…...
[ linux-系统 ] 常见指令2
1. man 指令 语法:man [选项] 命令 功能:查看联机手册获取帮助。 选项说明-k根据关键字搜索联机帮助。num只在第num章节找。-a显示所有章节的内容。 man是 Unix 和类 Unix 系统中的一个命令,用于查看操作系统和软件的手册页面(ma…...
Spring AI快速入门
一、引入依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> <dependencyManagement><dependencies><dependency><groupId>o…...
TCP数据报
三次握手(Three-Way Handshake) 是 TCP 协议中用于建立可靠连接的过程。通过三次握手,客户端和服务器能够确认彼此的存在,并且同步各自的初始序列号,为后续的数据传输做好准备。三次握手确保了双方在正式传输数据前能…...
JS循环-for循环嵌套
打印5行5列星星 效果图 代码: // 打印出5行5列的星星for(i 1 ; i < 5 ; i ) {// 外层控制打印行for(j 1 ; j < 5 ; j ) {// 内层控制每行打印几个document.write(⭐)}document.write(<br>)} 打印侧三角 效果图 代码: for(i 1 ; i &l…...
【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)
向扩散模型中引入先验知识,实现疾病进展预测,扩散模型开始细节作业了~ 论文:Enhancing Spatiotemporal Disease Progression Models via Latent Diffusion and Prior Knowledge 代码:https://github.com/LemuelPuglisi/BrLP 0、摘…...
Linux/AndroidOS中进程间的通信线程间的同步 - 内存映射
前言 如何使用 mmap()系统调用来创建内存映射。内存映射可用于 IPC 以及其他很多方面。 1 概述 mmap()系统调用在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种。 文件映射:文件映射将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文…...
单例模式的实现方法
单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制对资源(如配置对象、线程池、缓存等)的访问时特别有用。 一、单例模…...
laravel 12 监听syslog消息,并将消息格式化后存入mongodb
在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB,需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案: 一、环境配置 安装MongoDB扩展包 执行以下命令安装必要的依赖: composer require jenssegers/mongodb ^4.0确…...
如何在使用 docker-compose 命令时指定 COMPOSE_PROJECT_NAME ?
1.默认值 COMPOSE_PROJECT_NAME 环境变量的默认值并非 docker。在没有显式设置 COMPOSE_PROJECT_NAME 时,其默认值是运行 docker-compose 命令所在目录的基础名称(也就是当前工作目录去掉路径后的文件夹名称)。 以下为你详细说明࿱…...
在命令行终端中快速打开npm包官网
命令 npm home 命令用于快速打开指定 npm 包的官网。例如,npm home react 会尝试打开 React 库的官方网站。 npm home PACKAGE_NAME 该命令会首先查找指定包的 package.json 文件中的 homepage 字段,如果存在,则打开该字段指定的网址。 {&…...
鸿蒙NEXT开发动画(风格的弹性缩放加载动画组件)
1.创建空白项目 2.Page文件夹下面新建Spin.ets文件,代码如下: // 接口定义(必须放在使用前) /*** 关键帧动画整体配置参数*/ interface KeyframeAnimationConfig {iterations: number;delay: number; }/*** 单个关键帧动画项*/…...
【MongoDB篇】MongoDB的事务操作!
目录 引言第一节:什么是事务? (ACID 原则)第二节:MongoDB 的演进:多文档 ACID 事务的到来!🎉第三节:事务的“玩法”——如何执行一个事务?💻🤝第四节…...
Android第六次面试总结之Java设计模式篇(一)
一、单例模式在 Android 面试中的核心考点 1. Android 中如何安全实现单例?需注意哪些坑?(字节跳动、美团面试真题) 解答: Android 中实现单例需重点关注 Context 泄漏、线程安全 和 反射 / 序列化攻击。 推荐实现&…...
关于论文中插入公式但是公式相对于段落的位置偏上应该如何调整备份
因为mythtype之前插入到word里面出现了一些问题就给删掉了,本来要是word里面内联mythtype的话直接,点击mythtype的格式化就可以了, 也就是这个佬的视频介绍链接 然后现在试了试普通word里面的方法,这个是比较有用的 然后看这个例…...
[java八股文][Java并发编程面试篇]并发安全
juc包下你常用的类? 线程池相关: ThreadPoolExecutor:最核心的线程池类,用于创建和管理线程池。通过它可以灵活地配置线程池的参数,如核心线程数、最大线程数、任务队列等,以满足不同的并发处理需求。Exe…...
【东枫科技】代理英伟达产品:智能网卡
文章目录 对比详细:NVIDIA ConnectX-7 适配器详细:NVIDIA ConnectX-6 Lx 以太网智能网卡详细:NVIDIA ConnectX-6 Dx 以太网智能网卡详细:NVIDIA ConnectX-6 InfiniBand 适配器 对比 详细:NVIDIA ConnectX-7 适配器 为最…...
eNSP中路由器OSPF协议配置完整实验和命令解释
本实验使用三台华为路由器(R1、R2和R3)相连,配置OSPF协议实现网络互通。拓扑结构如下: 实验IP规划 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…...
解锁健康生活:全新养身指南
健康养身不是遥不可及的目标,而是由一个个小习惯编织成的生活方式。当我们将这些健康理念融入日常,就能为身体注入源源不断的活力。 从 “吃” 开始守护健康。尝试制作 “营养碗”,底层铺满羽衣甘蓝、生菜等绿叶蔬菜,中间搭配水…...
win11 怎样把D盘空间分给C盘一点
如下所示,我的C盘甚至已经爆红了,打算D盘清理一些空间给C盘。 首先附上链接,这是我在b站看的教程,虽然跟着视频没成功,但是结合评论区大神们的建议,尝试了好几种方法,最终自己摸索成功了。 【怎…...
Apache Doris与StarRocks对比
## 历史背景 Apache Doris源自百度的Palo项目,于2017年开源,2018年贡献给Apache基金会,并于2022年从Apache孵化器毕业成为顶级项目。StarRocks则是由原Apache Doris团队的一部分成员在2020年分支出来成立的独立项目,最初称为DorisDB,后更名为StarRocks。这两个项目虽然有…...
OSCP - Proving Grounds - NoName
主要知识点 linux命令注入SUID find提权 具体步骤 从nmap开始搜集信息,只开放了一个80端口 Nmap scan report for 192.168.171.15 Host is up (0.40s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http …...
2025年OpenAI重大架构调整:资本与使命的再平衡
目录 前言 一、调整核心:三重架构的重构 1.1 控制权的重新锚定 1.2 营利部门的角色转型 1.3 资金池的重新配置 二、调整动因:三重矛盾的破解 2.1 资金需求与融资限制的冲突 2.2 商业竞争与使命纯度的博弈 2.3 内部治理与外部监管的张力 三、产…...
【quantity】0 README.md文件
PhysUnits 物理单位库 Type-safe physical quantities with dimensional analysis 带量纲分析的类型安全物理量库 A Rust library for safe unit operations / Rust实现的类型安全单位计算库 Core Design / 核心设计 1. Dimension / 量纲 /// Base SI dimensions / 国际单…...
[python] str
一、移除字符串中所有非字母数字字符 使用正则表达式 import re string_value "alphanumeric123__" cleaned_string re.sub(r[\W_], , string_value) # 或 r[^a-zA-Z0-9] print(cleaned_string) # 输出: alphanumeric123使用**str.isalnum()**方法 string_v…...
iOS与HTTPS抓包调试小结
最近在做一个多端 SDK 网络请求兼容性的测试,期间遇到一些 HTTPS 请求抓不到、iOS 抓包失效等问题,趁机整理一下我平时抓包时用到的几个工具和技巧,也顺便记录一下对比体验。 一、传统工具的局限 最早用的是 Charles 和 Fiddler,…...
AI基础知识(02):机器学习的任务类型、学习方式、工作流程
03 机器学习(Machine Learning)的任务类型与学习方式 广义的机器学习主要是一个研究如何让计算机通过数据学习规律,并利用这些规律进行预测和决策的过程。这里的Machine并非物理意义上的机器,可以理解为计算机软硬件组织;Learning可以理解为一个系统或平台经历了某些过程…...
2025年大风灾害预警升级!疾风气象大模型如何筑起安全防线?
近年来,全球极端天气事件频发,大风灾害正成为威胁城市安全、交通运输和公共设施的重要隐患。据气象部门预测,2025年我国大风天气将更加频繁,局部地区可能出现超强阵风,对高空作业、电力设施、交通运输等领域构成严峻挑战。面对这一趋势,传统的气象预警方式已难以满足精准…...