C++:这门语言优势在哪?命名空间以及缺省参数?

文章目录

  • C++的优势
    • 解决命名空间的问题
  • 缺省参数

C++的优势

C++和C语言比起来有许多优势,这里我们先举一个例子,后续进行补充

解决命名空间的问题

首先看这样的代码:

#include <stdlib.h>
#include <stdio.h>int rand = 0;int main()
{printf("%d", rand);return 0;
}

上述代码可以编译通过吗?很明显是不可以的,原因在于头文件stdlib中包含了rand函数,因此在定义变量时就不可以再继续使用rand作为你的变量了

而在未来写工程项目中,这样的情况会遇见很多,在包含某个头文件后,代码中的许多变量就不可以再使用了,这就体现出了C语言的一部分局限性

那么C++在C语言的基础上很好的改善了这个问题,C++引入了命名空间的概念,把变量命名在某个空间内,这样就能很好的解决这个问题

命名空间的定义很自由,可以定义变量,定义函数,定义结构体,甚至可以嵌套定义

namespace zbh
{//定义变量int test = 0;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct MyStruct{int a;int b;};//命名空间可以嵌套namespace free{int print1(){return 1;}}
}

命名空间是如何使用的?C++如何保证命名空间的独立性?

  1. 使用变量时单独说明
  2. 前面定义使用命名空间中的某个函数或变量等
  3. 直接展开
#include <stdio.h>namespace zbh
{//定义变量int test = 0;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct MyStruct{int a;int b;};//命名空间可以嵌套namespace free{int print1(){return 1;}}
}using zbh::Add;int main()
{printf("%d\n", zbh::test);printf("%d\n", Add(1,2));printf("%d", zbh::free::print1());
}

上面对命名空间的定义也可以省略,直接在main函数前加上

using namespace zbh;

即可直接在后面的函数中使用,通过这样的方式即实现了函数命名空间的独立化

上述为2023.7.17学习所得


缺省参数

C++中对于函数参数定义了缺省参数,可以理解为,如果我对函数参数中的成员赋给了它一个初值,那么在后续调用的过程中,如果我并未给函数传参,那么函数就会使用默认的参数

具体样例如下所示

#include <iostream>
using namespace std;void f(int a = 10, int b = 20, int c = 30)
{cout << a << " " << b << " " << c << endl;
}int main()
{f();f(1);f(1, 2);f(1, 2, 3);return 0;
}

运行结果如下:
在这里插入图片描述
在实际中这样的操作有什么作用??

在定义顺序表中,我们使用的是动态开辟的顺序表,那么在初始化阶段我们是不是可以利用缺省参数优化一些步骤?

首先看C语言实现过程中的方法

#include <stdio.h>
#include <stdlib.h>typedef int SLDataType;
typedef struct Seqlist
{SLDataType* a;int size;int capacity;
};void SeqlistInit(Seqlist* s)
{s->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);s->size = 0;s->capacity = 4;
}

这样的实现实际上把容量写死了,不管要开辟多大的顺序表我们都是先开辟容量为4的顺序表再后续进行扩容,而扩容用的realloc是有消耗的

但假设如果我们使用缺省参数进行实现这个函数,可以优化很多

#include <iostream>
using namespace std;typedef int SLDataType;
typedef struct Seqlist
{SLDataType* a;int size;int capacity;
}Seqlist;void SeqlistInit(Seqlist* s,int capacity=4)
{s->a = (SLDataType*)malloc(sizeof(SLDataType) * capacity);s->size = 0;s->capacity = capacity;
}int main()
{Seqlist sq,sl;SeqlistInit(&sl);SeqlistInit(&sq, 100);return 0;
}

调用监视观察可以看到

在这里插入图片描述
利用缺省参数,我们确实实实在在实现了自由确定自己想要的容量

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

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

相关文章

【六袆 - windows】windows计划任务,命令行执行,开启计划任务,关闭计划任务,查询计划任务

windows计划任务 查看 Windows 自动执行的指令取消 Windows 中的计划任务启动执行计划任务 查看 Windows 自动执行的指令 您可以使用以下方法&#xff1a; 使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可…

Django实现接口自动化平台(十)自定义action names【持续更新中】

相关文章&#xff1a; Django实现接口自动化平台&#xff08;九&#xff09;环境envs序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 深入理解DRF中的Mixin类_做测试的喵酱的博客-CSDN博客 python中Mixin类的使用_做测试的喵酱的博客-CSDN博客 本章是项目的一…

职责链(Chain of responsibility)模式

目录 处理过程应用场景参与者协作效果实现相关模式应用与思考类图 职责链(Chain of responsibility)是一种对象行为模式&#xff0c;可以使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递…

[ 容器 ] Docker 基本管理

目录 一、Docker 概述1.1 Docker 是什么&#xff1f;1.2 Docker 的宗旨1.3 容器的优点1.4 Docker 与 虚拟机的区别1.5 容器在内核中支持的两种技术namespace的六大类型 二、Docker核心概念2.1 镜像2.2 容器2.3 仓库 三、安装 Docker四、docker 镜像操作五、 Docker 容器操作总结…

js数组常用方法

js数组常用方法 join Array.join() 方法将数组中所有元素都转化为字符串并连接在一起&#xff0c;返回最后生成的字符串。可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素。如果不指定分隔符&#xff0c;默认使用逗号。示例&#xff1a; var a [1,2,3] cons…

经济和行政手段使双高企业降低能耗总量和能耗强度,提高能源利用效率-安科瑞黄安南

摘要 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》&#xff08;工信部联节〔2022〕76号&#xff0c;以下简称《行动计划》&#xff09;&#xff0c;主要目的是为了提高工业领域能源利用效率&…

修复git diff正文中文乱码

Linux git diff正文中文乱码 在命令行下输入以下命令&#xff1a; $ git config --global core.quotepath false # 显示 status 编码 $ git config --global gui.encoding utf-8 # 图形界面编码 $ git config --global i18n.commit.encoding utf-8 # …

Ubuntu18.04 拯救者R9-7945HX 4060 配置ZED 2i代双目相机驱动+ORBSLAM2

AMD的拯救者网卡很拉&#xff0c;研究了很久除了换网卡可以解决网络问题&#xff0c;其它没找到合适的办法&#xff0c;这里我用手机USB共享网络的方式勉强上网&#xff0c;这里不得不说华为的信号桥很好用。 之前在1050ti的电脑上布置过&#xff0c;很顺利&#xff0c;这个新…

原生js实现将图片内容复制到剪贴板

核心代码 /*复制图片*/ copyImg(dom) {/* 警告&#xff1a;dom不能是img标签&#xff0c;建议用DIV标签包裹img标签&#xff0c;否者会报错&#xff01;不支持复制背景图&#xff01; */dom.style.userSelect auto;let selection getSelection(), range document.createRan…

Springboot调整接口响应返回时长详解(解决响应超时问题)

一、前言 当后端对于数据量较大的处理或是某些耗时的操作时,需要先对请求接口的请求进行响应。实际场景中会遇到请求业务处理流程耗时较长&#xff0c;比如长查询&#xff0c;远程调用等&#xff0c;主线程会被一直占用会影响其他请求的响应&#xff0c;导致服务端性能下降。同…

【Ubuntu报错】NetworkManager is not running

如果你在运行nmcli命令时遇到"NetworkManager is not running"错误&#xff0c;这意味着NetworkManager服务没有在你的系统上运行。 你可以尝试以下步骤来启动NetworkManager服务&#xff1a; 检查NetworkManager服务的状态&#xff1a;运行以下命令来检查NetworkMa…

Linux--系统调用接口:open

open的库函数&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>open的函数形式&#xff1a; int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode); flags:标志位 标志位选项…

大模型开发(五):实现Jupyter本地调用OpenAI API

全文共3000余字&#xff0c;预计阅读时间约15分钟 | 满满干货&#xff0c;建议收藏&#xff01; 大模型开发(五)&#xff1a;实现Jupyter本地调用OpenAI API OpenAI作为本轮大语言模型技术进步的先驱&#xff0c;其系列大型模型在效果上一直保持着领先。其推出的各类模型如文本…

springboot第30集:springboot集合问题

Logstash Logstash 是开源的服务器端数据处理管道&#xff0c;能够同时从多个来源采集数据、格式化数据&#xff0c;然后将数据发送到es进行存储。 ElasticSearch Elasticsearch 是基于JSON的分布式搜索和分析引擎&#xff0c;是利用倒排索引实现的全文索引。 KibanaKibana 能够…

云原生环境 - 如何自定义容器hosts文件

背景 在虚拟机环境下,如果想要自定义hosts,可以直接修改/etc/hosts文件。 在云原生环境下,也有这样的需求,想给启动的容器添加自定义的hosts配置。比如 1、DNS配置以及其它选项不合理的时候,比如解析出的IP地址不正确 2、覆盖掉对主机名的解析或者添加对某些主机名的解析…

线程的创建以及使用(MFC/C/C++)

目录 一、创建线程的几种方法 1、使用POSIX线程库&#xff08;pthread)&#xff08;C&#xff09; 2、 使用Windows线程库&#xff08;Win32 API&#xff09;&#xff08;C&#xff09; 3、使用C11标准库 二、线程的应用&#xff08;常用实例&#xff0c;附上完整代码&…

如何搭建一个标准的测量系统

要搭建一个标准的测量系统,需要考虑以下几个方面: 确定测量目的和需求:首先需要明确测量的目的和需求,例如测量长度、重量、体积等。同时需要考虑测量的精度和误差范围,以及测量系统的适用范围和条件等。选择合适的传感器:根据测量目的和需求,选择合适的传感器类型,例如…

数字化时代,如何做好用户体验与应用性能管理​

引言 随着数字化时代的到来&#xff0c;各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务&#xff0c;这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责&#xff0c;且使用多种运维工具&#xff0c;因此&#xff0c;当…

Databend 开源周报第 102 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 为指定列创建 B…

极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析...

全文链接&#xff1a;http://tecdat.cn/?p24182 本文用 R 编程语言极值理论 (EVT) 以确定 10 只股票指数的风险价值&#xff08;和条件 VaR&#xff09;&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 使用 Anderson-Darling 检验对 10 只股票的组合数据进行…