【c++入门】打开新世界大门之初遇c++

news/2024/11/23 8:48:48/

前言

在学习了c语言,初阶数据结构后,我们正式走进c++世界大门

目录

前言

一、认识c++

二、缺省参数

三、函数重载

四、引用

4.1什么是引用?

4.2 使用场景

4.2.1 做参数

4.2.2做函数返回值

4.3引用和指针的区别

五、内联函数

六、auto关键字

6.1使用细则

1. auto与指针和引用结合起来使用

2.同一行定义多个变量

3.不能推导的场景


一、认识c++

我们刚在学c语言的时候,第一节课敲得第一次代码 hello world,我们用c++打出,如下

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

std 是c++标准库的命名空间

在上述代码中,用cout标准输出对象的和cin标准输入对象,相当于printf和scanf。cout和cin是全局的流对象,endl是特殊的符号,表示换行输出,都包含在头文件<iostream>种,

二、缺省参数

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。

示例如下:

#include<iostream>
using namespace std;
int add(int a=0)
{cout<<a<<endl;
}
int main()
{    add();//没有传参时,使用参数的默认值add(10);//传参时,使用指定的实参return 0;
}

三、函数重载

所谓的函数重载其实是函数的一种特殊情况,在c++中,允许同一作用域中声明功能类似的同名函数,这些函数的形参列表(即参数个数、类型、类型顺序)不同。

示例代码如下:

#include<iostream>
using namespace std;
//参数类型不同
int add(int a,int b)
{return a+b;
}
double add(double a,double b)
{return a+b;
}
//参数个数不同
void dif()
{cout<<"wof wof"<<endl;
}
void dif(int m)
{cout<<"dif(int m)"<<endl;
}
//参数类型顺序不同
void sam(int x,char y)
{cout<<"sam(int x,char y)"<<endl;
}
void sam(chary,int x)
{cout<<"sam(chary,int x)"<<endl;
}

四、引用

4.1什么是引用?

引用是一个已存在的变量的别名,并不是一个新的变量,他和他引用的变量共用一个内存空间。

类型& 引用变量名(对象名) = 引用实体;

示例如下:

int m=10;

int &m1=m;

4.2 使用场景

4.2.1 做参数

示例如下:

void change(int& a,int& b)
{int tmp=a;a=b;b=tmp;
}

4.2.2做函数返回值

int& res()
{static int n=0;n++;return n;
}

4.3引用和指针的区别

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用 在定义时 必须初始化 ,指针没有要求
3. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何 一个同类型实体
4. 没有 NULL 引用 ,但有 NULL 指针
5. sizeof 中含义不同 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32
位平台下占 4 个字节 )
6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,但是没有多级引用
8. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理
9. 引用比指针使用起来相对更安全
1、语法概念上,引用就是个别名,没有独立空间,和引用实体公用一个空间
2、在底层实现上是有空间的,因为 引用时按照指针方式来实现

五、内联函数

inline 修饰 的函数叫做内联函数, 编译时 C++ 编译器会在 调用内联函数的地方展开 ,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。
示例如下:
inline int add(int a,int b)
{return a+b;
}int main()
{int sum=0;sum=add(1,2);return 0;
}

特性:

1. inline 是一种 以空间换时间 的做法,如果编译器将函数当成内联函数处理,在 编译阶段,会
用函数体替换函数调用 ,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运
行效率。
2. inline 对于编译器而言只是一个建议,不同编译器关于 inline 实现机制可能不同 ,一般建
议:将 函数规模较小 ( 即函数不是很长,具体没有准确的说法,取决于编译器内部实现 )
是递归、且频繁调用 的函数采用 inline 修饰,否则编译器会忽略iinline特性
3. inline 不建议声明和定义分离,分离会导致链接错误。因为 inline 被展开,就没有函数地址
了,链接就会找不到,应将生命和定义放在同一文件中
示例如下:
//f.h文件下
#include<iostream>
using namespace std;
inline void f(inti)
{cout<<i<<endl;
}

六、auto关键字

早期C/C++auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,

C++11 中,标准委员会赋予了 auto 全新的含义即: auto 不再是一个存储类型指示符,而是作为一
个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期推导而得.

6.1使用细则

1. auto与指针和引用结合起来使用

auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须
加&
int main()
{int x = 10;auto a = &x;auto* b = &x;auto& c = x;
}

2.同一行定义多个变量

auto a=2,b=3;

auto x=1,c=5.2;//该行代码会编译失败,因为cd的初始化表达式类型不同

3.不能推导的场景

1、auto不能作为函数的参数

// 此处代码编译失败, auto 不能作为形参类型,因为编译器无法对 a 的实际类型进行推导
void Test ( auto a )
{}

2、auto不能直接用来声明数组

面试题

宏的优缺点:

优点:

1. 增强代码的复用性。
2. 提高性能。
缺点:
1. 不方便调试宏。(因为预编译阶段进行了替换)
2. 导致代码可读性差,可维护性差,容易误用。
3. 没有类型安全的检查
C++ 有哪些技术替代宏
1. 常量定义 换用 const enum
2. 短小函数定义 换用内联函数

http://www.ppmy.cn/news/1549251.html

相关文章

索引(MySQL)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行 正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有…

从零开始认识显卡

显卡&#xff08;GPU&#xff0c;全称为Graphics Processing Unit&#xff09;&#xff0c;是电脑中专门负责图形处理的硬件组件。以下是从零开始认识显卡的简单介绍&#xff1a; 1. 显卡的基本组成 显卡通常由以下几个主要部分组成&#xff1a; GPU核心&#xff1a;显卡的“…

社交媒体营销新趋势:如何通过海外平台提升品牌曝光度?

社交媒体不仅是简单的信息传播工具&#xff0c;更是连接用户与品牌之间的重要纽带。每天&#xff0c;有数以亿计的全球用户在不同平台上活跃&#xff0c;潜藏着巨大的市场潜力。对于企业来说&#xff0c;关键在于制定清晰的营销策略&#xff0c;精准把握不同社交平台的特性&…

Spring Cloud Data Flow快速入门Demo

1.什么是Spring Cloud Data Flow&#xff1f; Spring Cloud Data Flow 是一个用于构建和编排数据处理流水线的云原生框架。它提供了一种简化的方式来定义、部署和管理数据处理任务和流应用程序。以下是一些关键特性和组件&#xff1a; 关键特性 流处理&#xff1a; 支持实时数…

Postman之数据提取

系列文章目录 1.Postman之安装及汉化基本使用介绍 2.Postman之变量操作 3.Postman之数据提取 4.Postman之pm.test断言操作 5.Postman之newman Postman之数据提取 1. 提取请求头\request中的数据2. 提取响应消息\response中的数据3. 通过正在表达式提取4. 提取cookies数据 本文主…

【大数据知识】ClickHouse入门

ClickHouse入门 概述一、主要应用场景二、技术特点三、性能表现四、限制与不足五、使用建议 分布式架构一、架构特点二、核心组件三、数据组织方式四、分布式查询原理五、优势与局限性 核心架构一、ClickHouse执行过程架构二、ClickHouse数据存储架构 为什么速度这么快存储层&a…

时序论文23|ICML24谷歌开源零样本时序大模型TimesFM

论文标题&#xff1a;A DECODER - ONLY FOUNDATION MODEL FOR TIME - SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/abs/2310.10688 论文链接&#xff1a;https://github.com/google-research/timesfm 前言 谷歌这篇时间序列大模型很早之前就在关注&#xff…

【Python入门第九讲】 集合(set)

_集合&#xff08;Set&#xff09;_是 Python 中的一种基本数据结构&#xff0c;它是由不重复元素组成的无序集合。集合对象支持多种数学运算&#xff0c;如并集、交集、差集和对称差等。 集合的特点包括&#xff1a; 无序性&#xff1a; 集合中的元素没有顺序&#xff0c;不能…