c++的概述(二)

news2025/2/23 12:57:48

新增bool类型

bool的变量只能赋值为true (非0) 或false (0)

#include <iostream>

using namespace std;


int main(int argc, char const *argv[])
{
    bool num;
    num = true;
    cout<<"true = "<<true<<endl;
    cout<<"false = "<<false<<endl;
    
    return 0;
}

 

三目运算符功能增强

C语言的3目运算符 a>b ? a:b

a>b ? a:b返回的是a或b的值。

1 (a>b ? a:b) = 100;//错误

C++语言的3目运算符 a>b ? a:b

a>b ? a:b返回的是a或b的引用(a或b的变量名)

1 (a>b ? a:b) =100;//ok

c++引用

引用的本质:给已有的变量名 取个别名

1、引用的定义方式:

//给num取个别名为b

 int num =100;

 //&不是取b的地址 只是描述b是num的别名 编译器不会为b开辟新的空间

 int &b = num;  //num的别名 是b

 //操作b等价操作num

#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
    int num = 10;
    int &b = num;

    cout<<"num = "<<num<<endl;
    cout<<"b = "<<b<<endl;

    //b和num  占用同一块空间
    cout<<"&num = "<<&num<<endl;
    cout<<"&b = "<<&b<<endl;
    return 0;
}

 定义步骤:

1、&修饰别名

2、给哪个变量取别名 就定义哪个变量

3、从上往下 整体替换

案例1:给数组取别名

1 int arr[5] ={1,2,3,4,5};

2 int (&new_arr)[5] = arr;

 

#include <iostream>

using namespace std;

void tets()
{
    int arr[5] = {1,2,3,4,5};
    int (&new_arr)[5] = arr;

    cout<<sizeof(new_arr)<<endl;
    cout<<new_arr[2]<<endl;
}


int main(int argc, char const *argv[])
{
    
    tets();

    return 0;
}

 2、引用必须初始化

int &b;  //非法的

 3、引用一旦确定是谁的别名 就不能更改

int num = 10;

int &b = num;

int data = 20;

b=data;  //千万不要认为是b给data取别名 仅仅是将data的值赋值b也就是data赋值num

 4、引用作为函数的参数 可以替代指针变量

#include <iostream>

using namespace std;


void swap_int01(int a1, int b1)
{
    int tmp = a1;
    a1 = b1;
     b1 = tmp;
 }
 void swap_int02(int *a1, int *b1)//a1=&a, b1=&b
 {
    //*a1 == a, *b1 == b
    int tmp = *a1;
    *a1 = *b1;
    *b1 = tmp;
 }
 void swap_int03(int &a1, int &b1)//int &a1 = a, int &b1=b
 {
    //a1 == a, b1 == b
    int tmp = a1;
    a1 = b1;
    b1 = tmp;
 }

 void test07()
 {
    int a = 10;
    int b = 20;

    cout<<"a = "<<a<<", b = "<<b <<endl;
    //swap_int01(a, b);//交换 不成功
    //swap_int02(&a, &b);//交换 成功
    swap_int03(a, b);//交换 成功
    cout<<"a = "<<a<<", b = "<<b<<endl;

 }

 int main(int argc, char *argv[])
 {
    test07();
    return 0;
 }

 引用作为函数的参数的好处:

1、函数内部 直接通过引用操作外部变量的值

2、省去了指针的操作

3、函数的形参不会拥有新的空间(节约了空间)

 

5、常引用

1 int &a = 10;//err

#include <iostream>

using namespace std;


void tets4()
{
    //a就叫常引用 不能通过a修改空间的值
    const int &a = 10;//ok
    cout<<"a = "<<a<<endl;//10
}

 int main(int argc, char *argv[])
 {
    
    tets4();
    return 0;
 }

常引用 一般作为函数的参数 防止函数内部修改外部空间值

#include <iostream>

using namespace std;


//常引用 作为函数的参数 即节约了空间 又防止函数内部修改外部变量的值
void printf_num(const int &a)
{
    //a = 1000;//err
    cout<<" num = "<<a<<endl;
}

 int main(int argc, char *argv[])
 {
    int num = 10;  
    printf_num(num);
    return 0;
 }

 

6、引用作为函数的返回值类型

 1、通过函数返回值 在外界操作 函数内部申请的空间

#include <iostream>
using namespace std;

int& get_data(void)
{
    static int data = 100;
    //不要返回 普通局部变量的 引用
    return data; //返回谁 外界的a就给data取别名
}

int main(int argc, char const *argv[])
{
    int &a = get_data();
    cout<<"data = "<<a<<endl;
    return 0;
}

 

c++内联函数

 1、inline修饰的函数就是内联函数。

inline int myAdd(int x, int y)//inline必须出现在函数的定义处

{

        return x+y;

 }

内联函数为了继承宏函数的效率,没有函数调用时开销,然后又可以像普通函数那样,可以 进行参数, 返回值类型的安全检查,又可以作为成员函函数。

内联函数:是在编译阶段 完成的替换。

2、内联函数的特点:

1、能保证参数的完整性

2、有作用域的限制,可以成为类的成员

3、类中的成员函数 默认都是内联函数(不用inline)

 内联函数的要求:

不能存在任何形式的循环语句 不能存在过多的条件判断语句 函数体不能过于庞大 不能 对函数进行取地址操作。

内联仅仅只是给编译器一个建议。

 3、宏函数和内联函数的区别

  • 宏函数: 预处理阶段完成替换、没有出入栈的开销、不能保证参数的完整性、没有作用域限 制、不能作为类的成员
  • 内联函数: 编译阶段完成替换、没有出入栈的开销、能保证参数的完整性、有作用域限制、能 作为类的成员

 

c++(默认参数)缺省参数

1、默认参数的定义

c++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值,当函数调用 的时候如果没有传参,编译器会自动用默认值代替

函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。

#include <iostream>
using namespace std;

int my_add(int a,int b = 100)
{

    return a+b;
}

int main(int argc, char const *argv[])
{
    cout<<my_add(10,20)<<endl;
    cout<<my_add(10)<<endl;
    return 0;
}

 2、默认参数的注意点

 函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都 必须设 置默认参数

1 int fun(int a, int b, int c=10);//正確

2 int fun(int a, int b=20, int c=10);//正確

3 int fun(int a=30, int b=20, int c=10);//正確

4 int fun(int a, int b=20, int c);//不正确

3、默认参数一般在函数声明的时候 设置 


#include<iostream>
using namespace std;
int main()
{
	double add(double a=3.2,double b=9.6);//在函数声明时设置默认参数
	cout<<add()<<endl;         //使用默认参数
	return 0;
}
double add(double a=3.2,double b=9.5)//在定义函数时设置默认参数
{
	return a+b;
}

c++函数的占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

//函数的占位参数,只输入数据类型,不用写变量名
//void func1(int a, int )//第二个int为占位参数,如果调用这个函数,必须传入参数(包括占位参数的值)
void func1(int a, int=10)//函数的占位参数也能有默认参数
{
	cout << "this is func1" << endl;
}
int main()
{
	func1(10, 20);//调用,如果没给默认参数就得输入
	func1(10);//给了就可以不用输入
}
#include<iostream>
using namespace std;

int fun(int a,int){        //第二个int位占位参数,就相当于没给形参起名字 
                        //形参的作用范围就那个 ()内
return a;
} 

int main(){
	 
    cout<<fun(10,10)<<endl; //调用的时候必须传两个值 

    return 0;
}


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

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

相关文章

移动端布局之flex布局3:案例-携程网首页案例制作(曾经的版本)2

移动端布局之flex布局3 案例&#xff1a;携程网首页案例制作(曾经的版本)背景线性渐变index.htmlindex.css 侧导航栏index.htmlindex.css 热门活动模块制作index.htmlindex.css 案例&#xff1a;携程网首页案例制作(曾经的版本) 背景线性渐变 background:linear-gradient(起始…

简单三步,教你快速接入淘宝开放平台,调用官方API

淘宝开放平台是为了方便开发者接入淘宝平台&#xff0c;进行商品、订单等信息的管理和交互而设计的。接入淘宝开放平台需要经过一系列审核和申请流程&#xff0c;而在API权限包审核时&#xff0c;一定要提供真实有效的证件和资料&#xff0c;并满足相应的条件&#xff0c;才能顺…

Redis未授权访问漏洞复现与利用

目录 一、漏洞简介及危害 1.1什么是redis未授权访问 1.2漏洞的危害&#xff1a; 1.3漏洞影响&#xff1a; 二、漏洞复现&#xff1a; 三、未授权访问漏洞测试 3.1 利用redis写webshell 3.2 利用"公私钥"认证获取root权限 3.3 利用crontab反弹shell 四、脚本…

自动化10年+经验给你10条建议,让你在自动化界占据一片地!

目录 前言&#xff1a; 1、哪一刻&#xff0c;让你想起了自动化 1.1 执行回归测试 1.2 压测场景执行并发 1.3 UI稳定&#xff0c;接口不断升级 2、七问&#xff1a;是否了解自动化风险 2.1 团队成员的资历 2.2 自动化成本投入产出比 2.3 慎重对待UI级自动化 2.4 自动化…

OpenAI | Let’s Verify Step by Step详细解读

一、概述 title&#xff1a;Let’s Verify Step by Step 论文地址&#xff1a;https://arxiv.org/abs/2305.20050 代码&#xff1a;GitHub - openai/prm800k: 800,000 step-level correctness labels on LLM solutions to MATH problems 1.1 Motivation 近期大模型的出现极…

青岛科技大学|物联网工程|物联网定位技术(第一讲)|6.7

目录 物联网定位技术&#xff08;第一讲&#xff09; 1. 什么是物联网定位技术&#xff1f; 2. 物联网定位技术主要有哪些&#xff1f; 3. 简述卫星定位系统的发展历史以及GPS的发展概况&#xff1f; &#xff08;1&#xff09;卫星定位的由来和发展 &#xff08;2&…

【Mysql】InnoDB 中 B+ 树索引的注意事项

一、根页面万年不动 在之前的文章里&#xff0c;为了方便理解&#xff0c;都是先画存储用户记录的叶子节点&#xff0c;然后再画出存储目录项记录的内节点。 但实际上 B 树的行成过程是这样的&#xff1a; 每当为某个表创建一个 B 树索引&#xff0c;都会为这个索引创建一个根…

Vue.js 中的服务端渲染和客户端渲染的区别

Vue.js 中的服务端渲染和客户端渲染的区别 Vue.js 是一个流行的前端框架&#xff0c;它提供了一种简单而强大的方式来构建交互式用户界面。Vue.js 可以在客户端和服务端执行渲染&#xff0c;这两种方式有不同的优势和劣势。本文将介绍 Vue.js 中的服务端渲染和客户端渲染的区别…

安全测试:13款免费的安全测试工具,抓紧白嫖不看后悔

目录 1. Excercise in a Box 2. Needle 3. DevSlop 4.移动安全框架(Mobile Security Framework) 5. Frida 6. Nishang 7.Tamper 8.InSpec 9. Faraday 10. Pocsuite 11. Taipan 12.Pacu 13. Secure Guilld 总结 1. Excercise in a Box Excercise in a Box是由英国…

Vue2 前端路由

SPA 单页面应用 只有一个页面&#xff08;一个html文件&#xff09; vue-router 组件之间的切换&#xff08;hash地址与组件间的关系&#xff09;–前端路由 vue版本与路由版本的对应关系 vue2->router3 vue3->router4 入门 用vue脚手架创建只有babel组件的vue项目…

Vue.js 中的 mixin 和混入有什么区别?

Vue.js 中的 mixin 和混入有什么区别&#xff1f; 在 Vue.js 中&#xff0c;mixin 和混入是两个常用的概念&#xff0c;它们可以帮助我们实现代码的复用和组件间的通信。虽然它们的名字很相似&#xff0c;但它们的作用和用法有所不同。本文将介绍 mixin 和混入的区别&#xff…

在Windows中安装极狐GitLab Runner(解决 Host key verification failed.)

官方文档&#xff1a;https://docs.gitlab.cn/runner/install/windows.html 在Windows中安装极狐GitLab Runner 1.下载GitLab Runner二进制文件&#xff0c;新建一个文件夹&#xff08;不要有中文&#xff09;&#xff0c;并将二进制文件放入该文件夹&#xff0c;重命名为“git…

最新成果展示:AlInN/GaN DBR模型数据库的开发与应用

由于AlN和GaN之间存在较大的晶格失配和热膨胀失配&#xff0c;导致很难获得高质量的AlN/GaN布拉格反射镜&#xff08;Distributed Bragg Reflection&#xff0c;DBR&#xff09;结构。为解决该问题&#xff0c;天津赛米卡尔科技有限公司技术团队基于先进的TCAD仿真设计平台开发…

OpenAI Triton 初探

Triton 2021年发布了1.0&#xff0c;我在调研GPU使用方法的时候知道了有这个东西&#xff0c;但是当时还不了解OpenAI&#xff0c;觉得这个项目太新太小众&#xff0c;并没有深究。现在GPT大火之后&#xff0c;再回过头看看他们的这个东西。 现在相关文档还是很少&#xff0c;…

EXCEL数据计算分析功能助力PID闭环控制优化

EXCEL大家并不陌生,这篇博客记录汇总利用EXCEL进行工作分析的一些技巧,专栏也会持续更新,感谢大家关注评论。首先介绍下工控上用的比较多的模拟量采集,模拟量采集的数学基础大家可以查看下面的博客: PLC模拟量输出 模拟量转换FC S_RTI_博图模拟量输出指令_RXXW_Dor的博客…

INDEMIND:陷入创新焦虑的扫地机器人,下一步该怎么走?

卖不动的扫地机器人&#xff0c;需要翻过高价和智能化两座大山。 卖不动的背后&#xff0c;原因是什么&#xff1f; 视角回到行业&#xff0c;随着基站型全功能扫地机器人的出现&#xff0c;机器人的产品力和使用体验得到明显提升&#xff0c;可以说已经能够极大程度的满足消…

Java中查看堆里的信息

文章目录 前言1 建议无脑的做一件事2 jmp命令3 导入 hprof 文件到Visual VM 中4 查看对象属性值 前言 日常工作中&#xff0c;我们可能会遇到这样的场景&#xff1a; java项目发生了OOM&#xff1b;想知道在某种场景下&#xff0c;堆里的信息&#xff0c;从而确认一些代码功能…

2000道面试必问的Java面试八股文及答案整理(2023版)

说快也快&#xff0c;说不快也不慢&#xff01; 年前&#xff0c;陆陆续续&#xff0c;好多大厂都在裁员&#xff1b; 年后&#xff0c;又有一大批程序员失业&#xff0c;找不到避风港&#xff1b; 这时候&#xff0c;就有人说了&#xff0c;为什么找工作这么难&#xff1f;…

【技巧】ZIP文件的分卷压缩如何设置 ?

有时候&#xff0c;因为文件过大&#xff0c;我们进行压缩后发现压缩包依旧很大&#xff0c;不方便储存或邮件发送等。 这种情况就需要把文件进行分卷压缩&#xff0c;也就是根据需要的大小&#xff0c;把文件分别压缩成若干个小压缩包。 还不了解的小伙伴&#xff0c;可以看…

入行这几年,我已经快要摸透了软件测试这一行!

目录 前言&#xff1a; 第一年 第二年 第三年 第四年 作为过来人的一些忠告 自动化测试到底应该学什么&#xff1f; 结尾&#xff1a; 前言&#xff1a; 软件测试是通过对软件系统进行测试、诊断和验证&#xff0c;以保证软件系统能够符合用户需求和预期质量标准的过程。 大…