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

news2025/2/3 13:58:58

文章目录

  • 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.coloradmin.cn/o/762161.html

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

相关文章

k8s服务发现之第二弹Service详解

创建 Service Kubernetes Servies 是一个 RESTFul 接口对象&#xff0c;可通过 yaml 文件创建。 例如&#xff0c;假设您有一组 Pod&#xff1a; 每个 Pod 都监听 9376 TCP 端口每个 Pod 都有标签 appMyApp apiVersion: v1 kind: Service metadata:name: my-service spec:s…

创建users子应用

1.创建&#xff1a;(venv) xxxx>python manage.py startapp users 2.移动到apps里面&#xff1b; 3.在settings里面注册子应用&#xff1b; # 注册子应用 apps/users apps/users/apps name apps.users 这个路径是什么就写什么 INSTALLED_APPS [ # 用[../namage.py st…

架构训练营学习笔记:4-3存储架构模式之分片架构和分区架构

分片架构的本质&#xff1a; 分片架构能提升写性能和存储性能&#xff0c;对应的主备架构的本质是备份&#xff0c;主从架构本质提升读性能。 分片架构的两个关键点&#xff1a;分片规则跟路由规则 分片规则&#xff1a; 选择基数比较大的某个数据键值&#xff0c;让数据均匀…

第七章 集成学习

文章目录 第七章 集成学习7.1个体和集成7.2Boosting和AdaBoost7.3Bagging和随机森林7.3.1Bagging7.3.2随机森林 7.4结合策略7.4.1平均法7.4.2投票法7.4.3学习法 7.6实验&#xff1a;Adaboost 第七章 集成学习 7.1个体和集成 集成学习通过构建并结合多个学习器来完成学习任务&…

TS报错Cannot find module ‘xxx‘ or its corresponding type declarations

最近使用 vite vue3 ts 开发一个文本标注的 web 平台&#xff0c;在项目中使用了一个 js-mark 的 npm 包&#xff0c;但是在 import 导入后出现了 TS 报错&#xff1a;TS2307: Cannot find module js-mark or its corresponding type declarations.、无法解析模块 js-mark 的…

Safe Policy Optimization 复现

复现结果 在 PointGoal1、CarGoal1、Velocity-Walker2d 三个任务上测试了 RCPO&#xff0c;CRPO 以及 Safe-Policy-Optimization 中实现的 CPO&#xff0c;PPO-Lag 算法。 CarGoal PointGoal PointGoal1 和 CarGoal1 任务相对比较困难&#xff0c;在探索初期就很容易违反约束…

Dart语言(01)环境安装基础语法总结

0 说明&#xff1a; 说明&#xff1a;该系列教程主要是为有一定语言基础 C/C的程序员&#xff0c;快速学习一门新语言所采用的方法&#xff0c;属于在C/C基础上扩展新语言只是体系的方式。 1 Dart语言简介 Dart亮相于2011年10月10日至12日在丹麦奥尔胡斯举行的GOTO大会&…

【动手学深度学习】--09.PyTorch神经网络基础

文章目录 PyTorch神经网络基础1.层和块1.1自定义块1.2顺序块1.3在前向传播函数中执行代码 2.参数管理2.1参数访问2.1.1目标参数2.1.2一次性访问所有参数2.1.3从嵌套块收集参数 2.2参数初始化2.2.1内置初始化2.2.2自定义初始化 2.3参数绑定 3.自定义层3.1不带参数的层3.2带参数的…

Python爬虫学习笔记:1688商品详情API 开发API接口文档

1688API接口是阿里巴巴集团推出的一种开放平台&#xff0c;提供了丰富的数据接口、转换工具以及开发资源&#xff0c;为开发者提供了通用的应用接口及大量数据资源&#xff0c;支持开发者在1688上进行商品搜索、订单管理、交易报表及物流等方面的操作。 1688API接口主要包含以…

解密成功之道!加湿制冷设备企业如何借助CRM系统降低经营成本?

如何降低企业经营成本的同时提高效率是加湿制冷设备企业关注的重要问题。在这篇软文中&#xff0c;我们将探讨如何通过CRM系统来实现这一目标。企业可以借助CRM系统提高客户关系管理水平&#xff0c;优化销售流程&#xff0c;提升售后服务&#xff0c;从而降低成本&#xff0c;…

价格监测的作用有哪些

随着品牌的发展&#xff0c;销售渠道也会逐步增多&#xff0c;渠道中的问题也会逐渐显现&#xff0c;比如低价、乱价、窜货、假货&#xff0c;所以品牌一般都会进行控价治理&#xff0c;控价最重要的一步便是价格监测&#xff0c;监测出来的价格高低&#xff0c;能直接反应渠道…

抑郁症缓解方法:从心理到行为,全方位提升生活质量

抑郁症是一种常见的心理疾病&#xff0c;不仅仅是心情低落&#xff0c;它还伴随着一系列的身体和心理症状。在应对抑郁症时&#xff0c;除了积极寻求医学专业人士的帮助之外&#xff0c;以下这些招数也可以帮助你缓解抑郁症。 1.保持规律的生活习惯&#xff1a;抑郁症患者往往会…

小程序地图个性化样式组件要收费了!

地图个性化样式组件 自2023年6月29日0点起&#xff0c;该能力需要先购买再使用。若未购买&#xff0c;届时将无法使用该能力。具体购买方式见付费管理。自2023年6月29日0时起&#xff0c;个性化地图配置界面的入口统一为微信公众平台-付费管理&#xff0c;请从此入口进入&#…

STUN/TURN/ICE

RFC 5389 - Session Traversal Utilities for NAT (STUN) https://www.cnblogs.com/pannengzhi/p/5041546.html https://www.cnblogs.com/pannengzhi/p/5048965.html STUN : Session Traversal Utilities for NAT, 一个协助穿越NAT的工具&#xff0c;运行在UDP和TCP之上。 NA…

yolov5(v7.0)网络修改实践一:集成YOLOX的backbone(CSPDarknet和Pafpn)到yolov5(v7.0)框架中

yolov5太好用了&#xff0c;无论是实际做工程还是学习研究&#xff0c;yolov5都比较好上手&#xff0c;而且现在工业界yolov5也应用广泛。但是&#xff0c;作为学习研究&#xff0c;有不少在yolov5之后提出的涨点算法&#xff0c;还是有价值进行研究的&#xff0c;也便于跟进当…

高效管理物流:利用批量查询申通物流信息的技巧

随着电子商务的飞速发展&#xff0c;快递已经成为了现代人生活中不可或缺的一部分。作为国内一家领先的快递公司&#xff0c;申通快递服务广泛&#xff0c;覆盖全国各地。在使用申通快递服务时&#xff0c;我们通过申通快递单号可以方便地查询物流信息。然而&#xff0c;许多人…

python开发项目基于语音识别的智能垃圾分类系统的设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

Ae 效果:CC Mr. Smoothie

风格化/CC Mr. Smoothie Stylize/CC Mr. Smoothie CC Mr. Smoothie&#xff08;平滑先生&#xff09;效果可以从一个图层上的两个点进行颜色采样&#xff0c;并将这个两点之间的颜色重映射到另一个图层上&#xff0c;可通过控制重映射的平滑度从而创建迷幻的外观效果。 ◆ ◆ …

图像处理之高斯滤波

文章目录 高斯函数1.一维高斯函数2. 二维高斯函数 高斯滤波1.高斯核生成2.滤波过程 高斯函数 高斯函数广泛应用于统计学领域&#xff0c;用于表述正态分布&#xff0c;在信号处理领域&#xff0c;用于定义高斯滤波器&#xff0c;在图像处理领域&#xff0c;二维高斯核函数常用…

创建一个类Person的简单实例

创建一个类Person的简单实例 创建一个类Person&#xff0c;包含以下属性&#xff1a;姓名&#xff08;name&#xff09;、年龄&#xff08;age&#xff09;、朋友&#xff08;friends数组&#xff09;、问候&#xff08;sayhi方法&#xff0c;输出问候语&#xff0c;例如&#…