一些关于C++的基础知识

引言:C++兼容C的大部分内容,但其中仍有许多小细节的东西需要大家注意

一.C++的第一个程序

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

第一次看这个是否感觉一头雾水?不要担心,我们会在后续的学习中了解并熟悉它们的。

二.命名空间

1.namespace的定义

1>命名空间的成员可以是变量,函数,类型等

namespace xw
{int a=0;int* b;
}

2>本质:namespace本质上是一个域,独立于全局域,不同域里可以定义同名变量等

3>namespace可以定义在全局域中,也可以嵌套定义

4>C++标准库都放在一个名为std的命名空间中

5>C++中包含局部域,全局域,命名空间域,类域。域会影响在编译时查找一个变量/函数/类型的出处,其中全局域和局部域还会影响变量的生命周期

2.namespace的价值:对标识符的名称进行本地化,避免命名冲突或名字污染

3.命名空间的使用

补:::域作用限定符

        当左边啥都没有时默认在全局域中取值,若左边指定域,则在特定域中取值

1>指定命名空间访问

2>使用using将命名空间中某个成员展开

3>展开命名空间中全部成员(在项目中不建议,因为冲突风险太大,多用于日常代码练习)

三.C++的输入与输出

1.<iostream>是标准输入输出流库,定义了标准的输入输出对象

2.std::cin是istream类的对象,它主要是面向窄字符的标准输入流

3.std::cout是ostream类的对象,它主要是面向窄字符的标准输出流

4.std::endl是一个函数,待流输入输出时,相当于插入一个换行符并且刷新缓冲区

5在C++中.<<是流插入运算符, >>是流提取运算符

注:在C和C++中有很多相同的符号,但可能用法不一样,要多加注意

6.C++的输入输出可以自动识别变量类型,相比于C更方便

四.缺省参数

1.定义:在声明或定义函数时为函数的参数指定一个缺省值

2.用法:在调用函数时若没有给定实参则调用缺省值,否则调用传入的实参值

3.分类:全缺省,半缺省(规定半缺省参数必须从右往左依次连续缺省,不可间隔跳跃给缺省值)

4.注意事项

1>带缺省参数的函数调用,C++规定必须从左往右给实参,不能跳跃给实参

2>当函数定义和声明分离时,不能再函数声明和定义中同时给缺省值,规定在函数声明中给缺省值

五.函数重载

C++中将出现在同一作用域同名函数形参不同(可以是形参个数不同,也可以是形参类型不同,或形参的顺序不同)的函数称为函数重载

六.引用

1.引用的概念

1>引用相当于给变量起了个别名,不会为其新开一块空间,而是与原变量公用一块空间

2>类型& 引用别名=引用对象

2.引用的特性

1>引用在定义时必须初始化

2>一个变量可以多次引用

3>引用一旦引用一个实体就不可以再引用其他实体(在C++中引用定义后不能改变指向)

3.引用的使用

1>引用在实践中只要用于引用传参和引用作为返回值,可以减少拷贝,提高效率和改变引用对象的同时改变被引用对象

2>引用传参和指针传参的功能类似,但相对而言引用传参更方便

4.const引用

1>对于const对象必须使用const引用,对于普通对象也可以使用const引用,因为对象在引用过程中访问权限只能缩小不能放大

2>对于引用对象是const对象,变量间的运算时必须使用const引用,因为他们都具有常属性

补:在进行变量间的运算时,编译器需要一块空间暂时存储表达式的求值结果,所以就临时创建一个未命名的对象即临时对象,临时对象具有常属性

5.指针 vs 引用

引用和指针在实践中相辅相成,功能有所重叠,但各有特点

引用可看作为一个变量取别名,不新开空间指针是存储一个变量的地址,需要开辟新空间
引用在定义时必须初始化指针在定义时可以不初始化
引用在定义后不可改变指向指针可以改变指向
引用是直接访问对象指针是间接访问对象
引用的类型大小即被引用对象的类型大小指针的大小是地址的大小(4字节/8字节)
引用很少出现空引用问题,比较安全指针易出现野指针,空指针问题

七.inline

1.用inline修饰的函数叫内联函数,编译的时候C++编译器会在调用的地方展开内联函数,这样调用函数时就需要建立栈帧,可以提高效率

2.当函数短小且调用频繁时建议使用inline,除此之外当你使用内联函数时,编译器会根据实际情况选择是否展开内联函数

3.C++引入内联函数是为了替代C的宏函数,因为宏函数中的坑太多

4.内联函数的定义和声明不能放在两个文件中,这样做会导致链接错误

八.nullptr

1.在C++中NULL代表字面常量0,在C中表示无类型指针(void*)的常量

2.在C++中,nullptr是一种特殊类型的字面量,可以转换成任意其它类型的指针类型,但不能转换成整型.

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

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

相关文章

数据挖掘——matplotlib

matplotlib概述 Mat指的是Matlab&#xff0c;plot指的是画图&#xff0c;lib即library&#xff0c;顾名思义&#xff0c;matplotlib是python专门用于开发2D图表的第三方库&#xff0c;使用之前需要下载该库&#xff0c;使用pip命令即可下载。 pip install matplotlib1、matpl…

elasticsearch SQL:在Elasticsearch中启用和使用SQL功能

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

服务注册Eureka

目录 一、背景 1、概念 2、CAP 理论 3、常见的注册中心 二、Eureka 三、搭建 Eureka Server 1、搭建注册中心 四、服务注册 五、服务发现 六、Eureka 和 Zooper 的区别 一、背景 1、概念 远程调用就类似于一种通信 例如&#xff1a;当游客与景区之间进行通信&…

代码随想录算法训练营第六十三天 | prim算法、kruskal算法、复习

53. 寻宝 — prim算法 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1053 文档讲解&#xff1a;https://programmercarl.com/kamacoder/0053.%E5%AF%BB%E5%AE%9D-prim.html 思路 本题是最小生成树的模板题&#xff0c;最小生成树可以使用 prim算法&#xf…

bash shell 重定向输入和输出

shell 提供的重定向操作符 操作符作用>将命令的输出发到一个文件中如果文件存在&#xff0c;则新的文件数据会覆盖已经存在的文件>>将命令的输出追加到一有文件如果文件不存在&#xff0c;则创建新的文件<将文件内容重定向到命令<<内联输入重定向(inline in…

Xubuntu24.04之设置高性能模式两种方式(二百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

苍穹外卖--新增员工

代码开发 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result…

Springboot各个版本维护时间

Springboot各个版本维护时间

MQTT教程--服务器使用EMQX和客户端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎&#xff0c;能够实现传感器、执行器和其它设备…

【Linux】shell基础知识点(updating)

1.输出重定向2.多命令批量执行&#xff08;; 、&&、 ||&#xff09;3.脚本不同方式执行的区别&#xff08;source、bash、sh、./&#xff09;4.理解环境变量5.export6.引号的使用last.命令相关 1.输出重定向 3种数据流&#xff1a; stdin&#xff1a;标准输入&#xf…

jmeter持续学习之----性能初级一些概念和指标

服务端为什么要进行性能测试 大量用户下&#xff0c;系统能否稳定运行&#xff08;比较多&#xff09; 用于硬件服务器的选型 用于软件技术的选型 性能测试关注的点 用户角度:响应时间 资源占用:并发用户数,TPS,资源占用(cpu,内存,JVM) 性能测试策略 基准测试:单用户测试,对…

去了字节跳动,才知道年薪40W的测试有这么多?

最近脉脉职言区有一条讨论火了&#xff1a; 哪家互联网公司薪资最‘厉害’&#xff1f; 下面的评论多为字节跳动&#xff0c;还炸出了很多年薪40W的测试工程师 我只想问一句&#xff0c;现在的测试都这么有钱了吗&#xff1f; 前几天还有朋友说&#xff0c;从腾讯跳槽去了字节&…

8.8.8.8 IP地址的作用

在跟着韦东山老师的学习手册中看见了关于8.8.8.8 IP用于检测网络状态&#xff0c;然后搜索了关于此IP的相关作用如下&#xff1a; 公共DNS服务&#xff1a;8.8.8.8是Google提供的两个公共DNS服务器地址之一&#xff08;另一个是8.8.4.4&#xff09;。DNS&#xff08;域名系统&a…

代码随想录训练营第三十天 452用最少数量的箭引爆气球 435无重叠区间 763划分字母区间

第一题&#xff1a; 原题链接&#xff1a;452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根据每个元素的第一个值进行排序&#xff0c;然后从第一个元素开始遍历&#xff0c;这里要注意我们初始化结果值的时候直接初始化为1&#x…

强化基石,引领未来:完善配套设施与提升服务水平

完善配套设施与提升服务水平对于产业园运营具有重要意义。它们不仅能够提升园区的硬件环境和整体形象&#xff0c;增强园区的吸引力和竞争力&#xff1b;还能够优化营商环境&#xff0c;降低企业运营成本&#xff0c;提高运营效率&#xff1b;同时推动园区创新&#xff0c;形成…

基于Java技术的网吧管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构 工具&#xff1a;MyEclipse&#xff0c;MySQL 系统展示 首页 个人中…

PDF转Markdown的开源工具解析

Marker&#xff1a;PDF转Markdown的开源工具解析 Marker是一个由VikParuchuri在GitHub上开发的开源项目&#xff0c;其核心功能是将PDF文件转换为Markdown格式。以下是对Marker项目的详细解析&#xff1a; 项目概述&#xff1a; 项目链接&#xff1a;https://github.com/VikP…

【技术追踪】DiffuMatting:使用抠图级别注释合成任意对象(ECCV-2024)

万物生&#xff1a;Diffusion与绿幕抠图&#xff0c;影视领域的福音~ 论文&#xff1a;DiffuMatting: Synthesizing Arbitrary Objects with Matting-level Annotation 代码&#xff1a;https://github.com/HUuxiaobin/DiffuMatting &#xff08;即将开源&#xff09; 0、摘要 …

2024年06月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 在C中&#xff0c;下列不可做变量的是( )。 A. five-Star B. five_star C…

(补充):java各种进制和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…