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

news2024/9/22 5:22:48

引言: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.coloradmin.cn/o/1911238.html

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

相关文章

如何用Vue3和Plotly.js创建交互式平行坐标图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue.js 中使用 Plotly.js 创建平行坐标图 应用场景介绍 平行坐标图是一种可视化高维数据集的强大技术。它可以帮助我们探索不同维度之间的关系&#xff0c;并识别模式和异常值。在 Vue.js 应用程序中&#xf…

Scissor算法-从含有表型的bulkRNA数据中提取信息进而鉴别单细胞亚群

在做基础实验的时候&#xff0c;研究者都希望能够改变各种条件来进行对比分析&#xff0c;从而探索自己所感兴趣的方向。 在做数据分析的时候也是一样的&#xff0c;我们希望有一个数据集能够附加了很多临床信息/表型&#xff0c;然后二次分析者们就可以进一步挖掘。 然而现实…

yolov8 人体姿态识别

引言 在计算机视觉的各种应用中&#xff0c;人体姿态检测是一项极具挑战性的任务&#xff0c;它能够帮助我们理解人体各部位的空间位置。本文将详细介绍如何使用 YOLOv8 和 Python 实现一个人体姿态检测系统&#xff0c;涵盖模型加载、图像预处理、姿态预测到结果可视化的全流…

探索 Qt 的 `QSqlDatabase`:数据库访问的桥梁

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

快速将一个网址打包成一个exe可执行文件

一、电脑需要node环境 如果没有下面有安装教程&#xff1a; node.js安装及环境配置超详细教程【Windows系统安装包方式】 https://blog.csdn.net/weixin_44893902/article/details/121788104 我的版本是v16.13.1 二、安装nativefier 这是一个GitHub上的开源项目&#xff1a…

自动驾驶算法———车道检测(一)

“ 在本章中&#xff0c;我将指导您构建一个简单但有效的车道检测管道&#xff0c;并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入&#xff0c;并产生车道边界的数学模型作为输出。图像由行车记录仪&#xff08;固定在车辆挡风玻璃后面的摄像头&#xff09;捕获。…

前端JS特效第26波:jQuery日期时间选择器插件

jQuery日期时间选择器插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html> <head lang"zh-CN"> <meta charset"UTF-8"> <title>jQuery日期时间选择器插件 - PHP中文网</t…

学生管理系统 | python

1. 题目描述 ****************************** 欢迎使用学生管理系统 ****************************** 1. 添加学生 2. 查看学生列表 3. 查看学生信息 4. 删除学生 5. 退出系统 1 请输入学生姓名: zhangsan 请输入学生学号: 10010 请输入学生班级: 3 请输入学生成…

PolarisMesh源码系列——服务如何注册

前话 PolarisMesh&#xff08;北极星&#xff09;是腾讯开源的服务治理平台&#xff0c;致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题&#xff0c;针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。 PolarisMesh 官网&am…

前端面试题34(在移动应用中,通用的实时传输协议)

在移动应用中&#xff0c;选择实时传输协议时通常会考虑几个关键因素&#xff1a;网络效率、功耗、实时性、跨平台兼容性以及数据类型&#xff08;如文本、图像、视频&#xff09;。以下是几种常用的实时传输协议及其在移动应用中的适用性&#xff1a; 1. WebSocket WebSocke…

WIN32核心编程 - 动态链接库

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 动态链接库 创建动态链接库 相关函数 遍历模块 导出未文档化 动态链接库 动态链接库&#xff08;DLL&#xff09; 动态链接库&#xff08;Dynamic-Link Library&#xff0c;简称DLL&#x…

SpringBoot:SpringBoot中如何实现对Http接口进行监控

一、前言 Spring Boot Actuator是Spring Boot提供的一个模块&#xff0c;用于监控和管理Spring Boot应用程序的运行时信息。它提供了一组监控端点&#xff08;endpoints&#xff09;&#xff0c;用于获取应用程序的健康状态、性能指标、配置信息等&#xff0c;并支持通过 HTTP …

JWT(Json Web Token)在.NET Core中的使用

登录成功时生成JWT字符串目录 JWT是什么&#xff1f; JWT的优点&#xff1a; JWT在.NET Core 中的使用 JWT是什么&#xff1f; JWT把登录信息&#xff08;也称作令牌&#xff09;保存在客户端为了防止客户端的数据造假&#xff0c;保存在客户端的令牌经过了签名处理&#xf…

python3 ftplib乱码怎么解决

其实很简单。ftplib.FTP里面有个参数叫encoding。 如上图最后一行。所以在使用FTP时&#xff0c;主动指定编码格式即可。 ftp ftplib.FTP() ftp.encoding "utf-8" 再使用就可以了。

gif压缩大小但不改变画质的最佳方法,7个gif压缩免费工具别错过!

你会不会也碰到过当你需要在自媒体平台上上传gif文件时&#xff0c;你会发现网页端最大限制为15MB&#xff0c;而手机端最大限制为5MB。那么如何在不不改变画质的同时压缩gif大小呢&#xff1f;如今&#xff0c;由于其特殊的动画以及快速传输的特点&#xff0c;gif文件已经成为…

Kamailio-命令行指令kamctl与kamcmd

前文也有提到几种指令的用处&#xff0c;与web页面相比&#xff0c;它就是更原始、面向运维的&#xff0c;正常如果有管理页面也需要使用到&#xff1a; kamailio - SIP 服务器脚本kamdbctl - 创建和管理数据库的脚本&#xff0c;比如你使用MySQL作为其存储时就需要使用到这个…

看完这些内幕 你还会夹娃娃吗?

文&#xff5c;琥珀食酒社 作者 | 朱珀 听我一句劝 别再去抓娃娃了 因为你能抓多少 早已经被设计好了 只有娃娃机老板 才能爆赚80% 今天的这篇文章 来自粉丝阿凯的投稿 他不仅能让你创业避坑 还会告诉你 整个娃娃机行业的内幕 如此敢自揭行业内幕的老板 不是对这…

短视频矩阵搭建,用云微客获客更方便

你的同行都爆单了&#xff0c;你还在问什么是矩阵&#xff1f;让我来告诉你。短视频矩阵是短视频获客的一种全新玩法&#xff0c;是以品牌宣传、产品推广为核心的一个高端布局手段&#xff0c;也是非常省钱的一种方式。 1.0时代&#xff0c;一部手机一个账号&#xff1b;2.0时代…

Flutter Inno Setup 打包 Windows 程序

转载自&#xff1a;flutter桌面应用从开发配置到打包分发 - 掘金 (juejin.cn) 五.打包 1.创建 release 版本的应用 flutter build release 执行完成后&#xff0c; release包位置在项目的build->windows->runer文件夹中 2.应用程序分发 Windows 为 Windows 平台构建…

卷积神经网络之ResNet50迁移学习

数据准备 下载狗与狼分类数据集&#xff0c;数据来自ImageNet&#xff0c;每个分类有大约120张训练图像与30张验证图像。使用download接口下载数据集&#xff0c;并自动解压到当前目录。 全是小狗的图片 另一边全是狼的图片 加载数据集 狼狗数据集提取自ImageNet分类数据集&a…