【C++】C++入门
一、 C++关键字(C++98)
C++有63个关键字(C语言有32个),如下:
asm | do | if | return | try | continue |
auto | double | inline | short | typedef | for |
bool | dynamic_cast | int | signed | typeid | public |
break | else | long | sizeof | typename | throw |
case | enum | mutable | static | union | wchar_t |
catch | explicit | namespace | static_cast | unsigned | default |
char | export | new | struct | using | friend |
class | extern | operator | switch | virtual | register |
const | false | private | template | void | true |
const_cast | float | protected | this | volatile | while |
delete | goto | reinterpret_cast |
具体常用关键字的应用和功能在后续的学习过程中再进行介绍。
二、命名空间
在C/C++中,变量、函数和类都是大量存在的,如果这些变量、函数和类的名称将都存在于全局作用域中,可能会出现不同变量(或函数或类)的名字相同的命名冲突。使用命名空间可以避免命名冲突。不同命名空间里的命名相互独立,不可能发生冲突。
1.命名空间的定义
定义格式:namespace 命名空间的名字
{
//命名空间的成员,可以是内置类型变量、自定义类型定义(变量)、函数
}
例如:
namespace N
{int a = 1;int b = 2;int Add(int x,int y){return x+y;}
}
2.命名空间的使用
2.1加命名空间名称及作用域限定符
即在需要使用命名空间的成员时,可以通过命名空间加限定符来访问。
例如:
int main()
{printf("%d\n", N::a);//N是命名空间的名字,a是其内的成员return 0;
}
2.2使用using将命名空间中某个成员引入
using可以用了来引入命名空间内的成员。
例如:
using N::b; //using引入命名空间的成员
int main()
{printf("%d\n", N::a);//命名空间+限定符+成员名printf("%d\n", b); //使用using引入后的命名空间的成员可以直接访问 return 0;
}
2.3使用using namespace 命名空间名称 引入
using namespace 加命名空间可以直接引入整个命名空间的成员。
例如:
using namespce N;
int main()
{printf("%d\n", N::a);//N::a替换成a也可以正常运行//命名空间引入后,其内的成员都可以直接访问printf("%d\n", b);Add(10, 20);return 0;
}
三、 C++输入&输出
1 . 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。
即:
#include <iostream>
using namespace std;
注意:1.早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应
头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,
规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因
此推荐使用<iostream>+std的方式。
2.std是C++标准库的命名空间,如果工程较大,最好不要展开整个命名空间,防止命名冲 突,可以选择性的展开自己用到的成员。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
4. 使用C++输入输出更方便,可以自动识别变量类型。不需要像printf/scanf输入输出时那样,需要手动控制格式。需要格式化输出时,可以使用printf/scanf语句来进行输入输出(C++兼容C)。
5. cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载。
四、缺省参数
1.定义
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有传参,则采用该形参的缺省值,否则使用传参的值。
例如:
void Func(int a = 0)
{cout<<a<<endl;
}int main()
{Func(); // 没有传参时,使用参数的缺省值Func(10); // 传参时,使用形参的值return 0;
}
2.分类
缺省可以分为全缺省和半缺省,全缺省是指函数的参数列表的所有形参都有缺省,半缺省是指参数列表有部分参数没有缺省值。
全缺省举例:
void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<< a <<endl;cout<<"b = "<< b <<endl;cout<<"c = "<< c <<endl;
}
半缺省举例:
void Func(int a, int b = 10, int c = 20)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
注意:1.半缺省参数必须从右向左依次赋缺省值,(因为传参的时候都是从右向左一次传参);
2.缺省参数不能同时在函数声明和定义时出现,否则编译器会报错(重定义);
3.缺省值只能是常量或全局变量。
五、 函数重载
1.概念
函数名相同,函数参数的类型或个数不同的一组函数。其功能相似且在同一作用域内,常用来处理实现功能类似且数据类型不同的问题。
注意:如果只有函数返回类型不同,则不能构成函数重载。
例如:
#include<iostream>
using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}int main()
{Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, 'a');f('a', 10);return 0;
}
六、引用
1.定义
引用在语法上可以理解为给变量起别名,而不会开辟新的空间。
2.引用和指针的区分
1.引用必须初始化且不能改变指向;(引用只能是一个变量的别名)
2.指针可以不初始化且能改变指向。
3.引用的使用场景
1.输出型参数(即定义形参的类型,解决形参的改变不影响实参的问题)
2.做返回值(传值返回 vs 传引用返回)
传值返回:函数调用结束返回前,拷贝返回变量的值至临时变量,返回后销毁栈帧,将临时变量的值返回给主函数。(临时变量具有常性(const),其值不可修改)
传引用返回:函数返回类型是引用类型,返回返回值的引用(本质也是返回原变量,不过销毁栈帧前不会创建临时变量;所以更省时,但是必须在返回变量不在将要销毁的函数栈帧的情况下使用。(例如,static变量(储存在静态区))
对引用和指针进行赋值和初始化时,有权限的概念(相对变量本身而言)。权限可以缩小或保持,不能扩大。
因为const变量的值不可修改,故:
注意:“权限”只适用于利用引用和指针进行赋值和初始化时。
(const常变量的值初始化后不可修改,具有常性;临时变量具有常性,强转时也会产生临时变量作为中间变量,故:
第一种错误的原因在于,强转i为double类型时会产生一个临时变量,用于暂时存放将i转为double类型数据时的值,其不可修改,具有常性,故在利用引用进行赋值时,会扩大权限,故错误。
(const常变量必须初始化且不能修改)
七、内联函数
C++推荐:1.const 或enum替代宏常量;2.inline替代宏函数
原因:宏是直接替换,在预处理阶段就已经将宏常量和宏函数替换成对应的常量和常量表达式,不能进行调试。
宏的优缺点?
优点:
1.增强代码的复用性。
2.提高性能。
缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
内联函数:在编译阶段,编译器会将函数调用转变为函数展开,不会创建新的函数栈帧,达到了空间换时间的目的(即增长了代码但是减少了栈帧的开辟消耗的时间)。
也是因为这个原因,如果内联函数的函数体过长,函数展开会时目标文件过大,这个时候编译器可以自行决定是否对函数进行展开(内联函数只有建议展开的作用)。
劣势:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
注意:1.内联函数声明和定义不能分离,否则会报错。
2.内联函数不能出现递归。
3.类的成员函数如果在类内直接定义,则编译器默认其为内联函数。
八、 auto关键字(C++11)
功能:自动推导变量的类型。
例如:
int main()
{int a = 5;auto b = a;auto c = &a;return 0;
}
其中,b和c的类型分别被自动推到为int类型和int*类型。
但是上述例子中auto的使用显得不太必要,其实主要,auto运用于变量类型很长时用来定义变量,可简化代码,也减少书写带来的偶然错误。
auto*表示的变量必须是指针类型的变量,否则会报错;auto&表示的变量必须是某个变量的引用。
注:typeid(变量名).name()可以得到变量的类型。
注意:1.auto可以在一行定义多个变量,但多个变量的类型必须相同。
2. auto不能做形参;auto不能用来声明数组。
九、 基于范围的for循环(C++11) 语法糖
对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因
此C++11中引入了基于范围的for循环。
for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。
例如:
void TestFor()
{int array[] = { 1, 2, 3, 4, 5 };for(auto& e : array) //自动依次取数组中数据 取别名 e对象,自动判断结束e *= 2; //修改数组元素的值,(如果for循环中不是引用而是auto,即是数 组元素的拷贝,则不能通过修改e的值来修改原数组元素的值)for(auto e : array) //自动依次取数组中数据 赋值给 e对象,自动判断结束cout << e << " ";
}
数组不存在传参的概念,传参时传过去的都是数组的首地址,形参是指针。
void TestFor(int array[])
{for(auto& e : array)cout<< e <<endl;
}
上述函数是错误示例
array是指针,不允许使用基于范围的for循环。
十、指针空值---nullptr(C++11)
nullptr的类型是void*,是空指针,与C语言中的NULL含义相同。
但是C++中的NULL的类型是int,含义是0;NULL在C语言中表示空指针,由0强转而来,(void*)0
nullptr于C++而言就如NULL于C语言,但是NULL在C++中已不是空指针的含义。
总结
本文主要介绍了一些C++的入门知识,C++是C的进阶,兼容C但比C语言更完善。
相关文章:
【C++】C++入门
一、 C关键字(C98) C有63个关键字(C语言有32个),如下: asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutabl…...
Linux网络技术学习(五)—— 网络设备初始化(I)
文章目录什么时候进行的设备初始化?设备注册和初始化NIC(网卡 Network Interface Card)初始化的基本目标设备与内核之间的交互硬件中断中断类型传送节流方式为了改善效率中断共享IRQ处理函数映射的组织irqaction结构体存储方式什么时候进行的…...
[技术选型] ClickHouse和StarRocks的介绍
文章目录1.ClickHouse介绍2.StarRocks介绍1.ClickHouse介绍 ClickHouse是面向联机分析处理(OLAP)的开源分析引擎。最初由俄罗斯第一搜索引擎Yandex开发,于2016年开源,开发语言为C。由于其优良的查询性能,PB级的数据规…...
算法刷题打卡第90天:表现良好的最长时间段
表现良好的最长时间段 难度:中等 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」,意味在这…...
Python语言零基础入门教程(十七)
Python 文件I/O 本章只讲述所有基本的 I/O 函数,更多函数请参考Python标准文档。 #### 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式,并将结果写…...
C语言中大小端问题
目录 一、什么是大小端 二、 举个例子 三、大小端演示 四、解释"二"中举例的问题 五、怎么判断是大端还是小端 六、一个题目 一、什么是大小端 大端模式(大端字节序存储):就是高位字节数据存放在内存的低地址端ÿ…...
vue2+微前端qiankun从搭建到部署的实践(主子应用切换;集成vue3+vite3子应用)
一、最终效果 二、微前端(qiankun)介绍及为什么选择用微前端,可以看官网 三、目录结构如下 四、具体配置 一、主应用配置 1、主应用技术栈 Vue-cli4搭建项目Vue2Element-Uiqiankun;Vue2Element-Uiqiankun 2、搭建好主项目&…...
怎么代理微信小程序创业?
随着微信的兴起,小程序已经成为了人们生活中不可或缺的一部分。如果你想要创业的话,那么代理微信小程序是一个不错的选择。本文将为大家介绍怎么代理微信小程序创业。 一、什么是微信小程序 微信小程序是一款专为移动设备使用者而设计的应用。它通过扫…...
今天是情人节呐,我利用Python制作了好多表白的东西,快来吧~
今天是情人节那,有没有现在没有对象的宝子,评论里扣个111哈哈 目录 玫瑰 爱心树 丘比特 多彩气球 阿玥的小课堂 一、情人节的由来 二、情人节的来历和意义 玫瑰 局部代码实现如下: # 花瓣1 turtle.left(150) turtle.circle(-90, 70) …...
【Linux】-- 进程信号(处理、内核)
上篇:【Linux】-- 进程信号(认识、应用)_川入的博客-CSDN博客 目录 信号其他相关常见概念 pending handler block 信号处理的过程 sigset_t sigset_t使用 系统接口 sigpending sigprocmask 捕捉方法 sigaction struct sigactio …...
C/【静态通讯录】
🌱博客主页:大寄一场. 🌱系列专栏:C语言学习笔记 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 前言 往期回顾: C/扫雷 C/N子棋 通讯录作为通讯录地址的书本,当今的通讯录可以涵盖多项…...
万卷书 - 让孩子对自己负责 [The Self-Driven Child]
让孩子对自己负责 The Self-Driven Child - 让你的孩子更加科学合理的掌控自己的生活 简介 《The Self-Driven Child》(2018)解释了我们对孩子的习惯性控制欲,它导致了孩子压力过大、难以合作,以及主观能动性差。本书不提倡这种做法,而是认为我们应该帮助孩子自己做出合适…...
Postman中cookie的操作
在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问。 Postman接口请求使用Cookie有如下两种方式: 1、直接在头域中添加Cookie头域,适用于已经知道请求所用Cookie数据的情况。 2、使用…...
torch.grid_sample
参考: 双线性插值的理论Pytorch grid_sample解析PyTorch中grid_sample的使用方法pytorch中的grid_sample()使用 查阅官方文档,TORCH.NN.FUNCTIONAL.GRID_SAMPLE grid_sample的函数签名如下所示,torch.nn.functional.grid_sample(input, gr…...
前端基于 Docker 的 SSR 持续开发集成环境实践
项目收益 整体开发效率提升20%。加快首屏渲染速度,减少白屏时间,弱网环境下页面打开速度提升40%。 权衡 在选择使用SSR之前,需要考虑以下事项! SSR需要可以运行Node.js的服务器,学习成本相对较高。对于服务器而言&a…...
ARM交叉编译入门及交叉编译第三方库常见问题解析
1. 交叉编译是什么? 交叉编译简单说来,就是编译成果物的地儿不是你运行这个成果物的地儿。最常见的场景,就是我们要编译一个 ARM版本 的可执行程序,但我们编译这个 ARM版本 可执行程序的地方,是在一个 x86_x64 的平台…...
Ruby Web Service 应用 - SOAP4R
什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范。 SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。 简单对象访问协议是交换数据的一种协议规范,是一种轻量的、…...
HashMap底层实现原理概述
原文https://blog.csdn.net/fedorafrog/article/details/115478407 hashMap结构 常见问题 在理解了HashMap的整体架构的基础上,我们可以试着回答一下下面的几个问题,如果对其中的某几个问题还有疑惑,那就说明我们还需要深入代码,…...
Linux驱动学习环境搭建
背景常识 一、程序分类 程序按其运行环境分为: 1. 裸机程序:直接运行在对应硬件上的程序 2. 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 所有智能设备其实都是计算机,机顶盒、路由器、冰箱、洗衣机、汽…...
Java基础之异常
目录1 异常1.1 异常的概述1.2 常见异常类型1.3 JVM的默认处理方案1.4 编译时异常的处理方式1.4.1 异常处理之 try ... catch ... [ktʃ](捕获异常)1.4.2 异常处理之 throws(抛出异常)1.5 Throwable 的成员方法1.6 编译时异常和运行…...
感慨:大三了,未来该何去何从呢
笔者曾在十一月份通过了字节跳动的三次面试, 但是最终因为疫情原因不能满足公司的入职时间要求, 没有拿到offer。近期也是投递了大量大厂的实习岗, 但是要么已读不回, 要么明确告诉我学历至少要985硕士(天天被阿里cpu)。 说实话一…...
分账系统逻辑
一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景: 在分销业务中,主营商户收到用户购买分销商品所支付的款项后,可以通过分账逻辑,与分销商进行佣金结算。在零售、餐饮等行业中,当销售人员完零售等…...
SpringCloud篇——什么是SpringCloud、有什么优缺点、学习顺序是什么
文章目录一、首先看官方解释二、Spring Cloud 的项目的位置三、Spring Cloud的子项目四、Spring Cloud 现状五、spring cloud 优缺点六、Spring Cloud 和 Dubbo 对比七、Spring Cloud 学习路线一、首先看官方解释 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式…...
TCP核心机制之连接管理详解(三次握手,四次挥手)
目录 前言: 建立连接 建立连接主要两个TCP状态: 断开连接 断开连接的两个重要状态 小结: 前言: TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念:…...
前端—环境配置
前端开发建议用 Google Chrome 浏览器 vscode https://code.visualstudio.com 1、open in browser 插件:可以在 vscode 中直接运行查看浏览器效果 2、Live Server 插件:可以使代码修改浏览器页面实时刷新。 用户代码片段 … JavaScript 与 TypeScri…...
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象📗理解一📘理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法🌸I …...
Java集合:Map的使用
1.Map框架l----Map:双列数据,存储key-value对的数据 ---类似于高中的函数: y f(x)|----HashMap:作为Map的主要实现类, 线程不安全的,效率高;可以存储null的key和value|----LinkedHashMap:保证在遍历map元素时,可以按照…...
【Datawhale图机器学习】第一章图机器学习导论
图机器学习导论 学习路径与必读论文清单 斯坦福CS224W(子豪兄中文精讲)知识图谱实战DeepwalkNode2vecPageRankGNNGCNGragh-SAGEGINGATTrans-ETrans-R 图无处不在 图是描述关联数据的通用语言 举例 计算机网络新冠肺炎流行病学调查传播链食物链地铁图…...
window 配置深度学习环境GPU
CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…...
VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Cod…...
免费建站的网站/百度快速收录开通
标题:控制可编辑行且点击回车执行修改.声明:本帖只是一个测试Demo,所以,不会写得太规范,也不会考虑到安全性.以方便为 主.所以,用得到的朋友在项目中使用的时候,还希望对其进行改进.环境数据库访问类: SqlHelper.cs点击下载开发工具: VS.net 2003数据库: Sql Server…...
做网站宣传图片/网盘资源
网站请勿随意使用第三方CDN资源调用公开库资源 - 聆听分享网...
wordpress手机端兼容自定义页面/电子商务网站建设流程
我们知道,MongoDB是一种非关系型数据库,所以它的查询方式与标准的结构化查询语言SQL有很大的不同。但无论它是怎么复杂的一种结构,当它经过开发者的双手后,它只能变成客户想要的结构。今天要讲述的就是MongoVUE下如何MongoDB的Gro…...
购物网站开发的背景与意义/seo研究中心qq群
hdfs中使用的是hadoop用户,但是有些脚本任务是在root中执行的,这个时候可以使用sudo -u hadoop切换用户执行hadoop命令,但是会提示如下: [rootxxx qingfeng]# sudo -u hadoop hadoop fs -rmr /user/hive/warehouse/xxxxx.db sudo…...
创建wordpress用户访问数据库/网站排名怎么做上去
#所有防火墙规则都放到一个shell脚本里,调整后就执行一遍。 #!/bin/sh #首先先清空所有规则 /sbin/iptables -F #-F: FLASH,清空规则链 #for local /sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #或者 /sbin/iptables -A INPUT -…...
手机网站开发哪个好/江苏seo排名
iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了。如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要&a…...