C++基础语法和用法

文章目录

  • 1.hello world
  • 2.引入namespace(命名空间/域问题)
  • 3.输入输出
  • 4.缺省参数/默认参数
  • 5.函数重载
  • 6.引用
  • 7.内联函数
  • 8.auto关键字,基于范围的for循环,空指针NULL
    • 8.1 auto
    • 8.2 基于范围的for循环
    • 8.3 nullptr


1.hello world

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

这便是C++的hello world

2.引入namespace(命名空间/域问题)

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

namespace shuaige
{int rand = 0;
}namespace shuaige
{int x = 1;
}

这样就会合并!
除此之外,namespace中还可以写函数,结构体等。

在这里插入图片描述
对于命名空间我们一般不建议全部展开,在大型项目时我们一般用什么展开什么,大致如下:

#include<iostream>
using std::cout;
using std::endl;
namespace shuaige
{namespace zs{void push(){cout<<"zs"z<<endl;}}int main()
{int i = 0;std::cin >> i;cout << "xxxxxx" << endl;cout << "xxxxxx" << endl;bit::zs::Push();return 0;
}

3.输入输出

在这里插入图片描述

4.缺省参数/默认参数

①第一种
在这里插入图片描述
②第二种:全缺省
可以这样花着玩,但是不能跳跃着传参。
比如,第一个不传二三传。一三传,第二个不传!
在这里插入图片描述
③第三种:半缺省(部分缺省)
其必须从右往左连续给,也是不能跳跃
在这里插入图片描述
④应用场景举例:
在这里插入图片描述
在这里插入图片描述
这样就可以编译成功!

5.函数重载

在学Cpp之前学了一下JAVA的基础语法,JAVA里面也是有函数重载,感觉是一样的

CPP语言允许同名函数,要求:函数名相同,参数不同,构成函数重载
1、参数类型的不同
2、参数个数不同
3、参数顺序不同(本质还是类型不同)

应该很好理解,就举下面一个例子
在这里插入图片描述
在这里插入图片描述

6.引用

引用的最基本用法如下:
在这里插入图片描述
引用不能代替指针的应用场景:
在这里插入图片描述
野引用和引用返回:
在这里插入图片描述
引用和指针的对比:
在语法上:
1.引用就是一个别名,不需要开辟新空间;指针是一个地址,需要开辟新空间存贮地址!
2.引用必须初始化;指针初步初始化无所谓。
3.引用不能改变指向;指针可以改变指向!
4.引用相对指针更安全,没有空引用,但是指针有NULL。野指针很容易出现,但是野引用不那么常见!
5.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
位平台下占4个字节)。
6.引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。
7.有多级指针,但是没有多级引用。
8.访问实体方式不同,指针需要显式解引用,引用编译器自己处理。

在底层上:
1.引用底层时用指针实现的,会在底层开空间。和语法上是背离的。
2.在最底层汇编的层面上,是没有引用的,都是指针!!!

7.内联函数

在这里插入图片描述
但是内联函数也是有缺陷的!我们不能把所有函数都加上inline
如果全部使用内联函数,那么最后我们生成的可执行程序会非常大,这是不好的!!

inline是一种以空间(编译好的可执行程序)换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
在这里插入图片描述

8.auto关键字,基于范围的for循环,空指针NULL

8.1 auto

auto可以自动推导类型

int i=0;
auto k=i;//自动识别k是一个整数
auto p1=&i;//识别其是一个指针
auto *p2=&i;//这样本身定义了指针,对右边是有要求的
auto *p3=i;//这样写就错了,和上面做一个对比
auto& r=i;//复用 ,r是i的别名

使用场景:
在这里插入图片描述
注意: auto不能作为参数!auto也不能定义数组!不过现在auto可以作为返回值了。
但是不建议这样一直使用auto,因为如果有多层嵌套,我们很难推断出他到底是什么类型的值!

8.2 基于范围的for循环

auto还有基于范围的for循环:
在这里插入图片描述

int array[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
array[i] *= 2;
for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)
cout << *p << endl;

其就和这个代码意思一样,用起来十分方便。遍历数组可以多用这个方法!!!

8.3 nullptr

C++空指针问题:
在这里插入图片描述

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

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

相关文章

世界经济论坛发布《2024年全球风险报告》和《2024年全球网络安全展望》:网络攻击是2024世界5大风险之一,网络安全经济增速是全球经济的四倍

在近日举行的世界经济论坛 (WEF)上&#xff0c;发布了《2024 年全球风险》报告和《2024年全球网络安全展望》两份重磅报告&#xff0c;分别揭示了全球经济今年和未来几年可能面临的一些关键风险和问题&#xff0c;以及网络安全与全球经济之间的逻辑关系。 2024年全球风险报告 今…

SQL数据库的创建操作

1.如何才能创建一个库、表 CREATE DATABASE 数据库: SHOW databases&#xff1b; USE 数据库; DROP DATABASE 数据库&#xff1b; /*数据表操作/ CREATE TABLE teacher( id int (4) not null primary key auto_increment, name char(20)not null, sex char(10) notnul…

ES6笔记-symbol

ES6 symbol 是什么 ES5的对象属性名是字符串&#xff0c;这容易造成属性名的冲突。symbol是一种机制&#xff0c;保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。 它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。…

CloudPanel RCE漏洞复现(CVE-2023-35885)

0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…

MyBatis第四课动态SQL

目录 引言&#xff1a; 一、动态SQL书写方式 二、会帮我们处理多余的字符 方法2:使用where也可以进行消除and&#xff0c;但是出现的问题 三、标签 四、foreach(循环操作) ​编辑 Mybatis传递List集合报错 Available parameters are [collection, list] 和 引言&…

Apache Spark中的广播变量分发机制

Apache Spark中的广播变量提供了一种机制&#xff0c;允许用户在集群中共享只读变量&#xff0c;并且每个任务都可以访问这个变量&#xff0c;而不需要在每次任务之间重新发送该变量。这种机制特别适用于在所有节点上都需要访问同一份只读数据集的情况&#xff0c;因为它可以显…

Linux: make/Makefile 相关的知识

背景&#xff1a; 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c…

关于小程序吞噬margin-rightBug

关于小程序吞噬margin-right的Bug 今天在写小程序的时候发现我在flex布局的时候我的margin-right不生效 经过测试只能使用display:inline-block; 配合 white-space: nowrap;来实现flex布局同时也解决了不显示右边距的问题 复盘:在小程序中有一个横向滚动的 需求 滚动的屏幕的…

良心推荐!五个超好用的Vue3工具

vue3-dnd 是用来做drag and drop的&#xff0c;也就是拖放&#xff0c;很多人多 Vue 的拖放库已经断代了&#xff0c;其实 Vue3 也有拖放库的&#xff0c;那就是 vue3-dnd。 v-wave 这可库可以通过自定义指令的形式&#xff0c;让目标点击节点具备波纹的效果&#xff0c;如下…

React 18版本配置rem 和 vw

React 18版本配置rem 和 vw 经过无数次的实验最终发现兼容性比较好的方案是配置webpack.config.js 第一步: npm install lib-flexible postcss-pxtorem yarn add lib-flexible postcss-pxtorem第二步: 接下来直接解包-- yarn eject npm run eject第三步: 这一步也是最关键…

mysql的varchar长度到底能插多少字符?

在用navicat迁移表结构&#xff0c;从oracle到MySQL时&#xff0c;注意如下坑&#xff1a; 1、如果varchar2(256)以上&#xff0c;则在mysql会自动用text取代&#xff0c;需要考虑手工修改字段类型为varchar(256) ALTER TABLE DES_LOGIC_RESOURCE MODIFY REMARK VARCHAR(4000);…

MySQL两个表的亲密接触-连接查询的原理

MySQL对于被驱动表的关联字段没索引的关联查询&#xff0c;一般都会使用 BNL 算法。如果有索引一般选择 NLJ 算法&#xff0c;有 索引的情况下 NLJ 算法比 BNL算法性能更高。 关系型数据库还有一个重要的概念&#xff1a;Join&#xff08;连接&#xff09;。使用Join有好处&…

学会使用ubuntu——ubuntu22.04使用WebCatlog

Ubuntu22.04使用WebCatlog WebCatlog是适用于Gnu / Linux&#xff0c;Windows或Mac OS X系统的桌面程序。 引擎基于铬&#xff0c;它用于在我们的桌面上处理Web服务。简单点就是把网页单独一个窗口出来显示&#xff0c;当一个app用。本文就是利用WebCatlog安装后的notion编写的…

如何学习计算机视觉

学习计算机视觉可以通过以下步骤进行&#xff1a; 了解基本概念和原理&#xff1a;首先&#xff0c;你可以学习计算机视觉的基本概念和原理&#xff0c;包括图像处理、特征提取、目标检测、物体识别等。这些基础知识将帮助你理解计算机视觉的工作原理。 学习算法和技术&#x…

C语言-算法-快速幂

【模板】快速幂 题目描述 给你三个整数 a , b , p a,b,p a,b,p&#xff0c;求 a b m o d p a^b \bmod p abmodp。 输入格式 输入只有一行三个整数&#xff0c;分别代表 a , b , p a,b,p a,b,p。 输出格式 输出一行一个字符串 a^b mod ps&#xff0c;其中 a , b , p a…

第九篇 华为云Iot SDK的简单应用

第九篇 华为云Iot SDK的简单应用 一、华为云Iot SDK API的简单使用 1.初始化SDK 2.绑定连接配置信息 3.连接服务器 4.上报属性 5.接收命令 二、实现智能家居灯光状态上报 &#x1f516;以下是上报数据到华为云Iot的代码片段&#xff0c;配合串口控制灯光&#xff0c;改变灯…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

C++ STL之list的使用及模拟实现

文章目录 1. 介绍2. list类的使用2.1 list类对象的构造函数2.2 list类对象的容量操作2.3 list类对象的修改操作2.4 list类对象的访问及遍历操作 3. list类的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列…

yolov8 opencv dnn部署自己的模型

源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv…

【机组】计算机组成原理实验指导书.

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 第一章 性能特点 1.1 系…