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

2023-11-09

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;
}

调用监视观察可以看到

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Struts2框架验证

    struts2有框架验证 我这边主要说的是XML配置的struts2的框架验证 继承validate方法的验证还是比较容易的 至于有人用注解来验证不怎么常见我也不讲了 感觉好多东西总结的都会有注解来掺和一脚 比如spring注入方式 最常见
  • Python全系列教程:超详细1小时学会Python,太简单了

    1 Hello world 安装完Python之后 打开IDLE Python GUI 该程序是Python语言解释器 你写的语句能够立即运行 我们写下一句著名的程序语句 并按回车 你就能看到这句被K R引入到程序世界的名言 在解释器中选择
  • UFT 自带两个经典sample航空订票应用程序

    大家知道UFT是QTP的升级换代产品 一定保留上一版系统原有的一些的痕迹 比如经典的Flights应用 安装路径 D Program Files x86 Micro Focus Unified Functional Testing samp
  • 单片机定时器/计数器、中断和串口控制位

    一 定时器 计数器 1 定时器控制寄存器 TCON TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TF1 TF0 定时器 计数器中断请求标志位当定时器计数满溢出回零时 有硬件置位 并可申请中断 当CPU响应中断并
  • C语言:(含大量图解)你真的了解结构体吗?

    文章目录 结构体 结构体的定义 结构体大小计算 结构体的对齐规则 关于对齐规则的解释 为什么C语言要这样进行大小设定 平台移植原因 追求高性能 修改默认对齐数 结构体传参问题 结构体 结构体的定义 结构体是一些值的集合 这些值被称为成员变量
  • 【RPC】RPC的序列化方式

    序列化 网络传输的数据必须是二进制数据 但调用方请求的出入参数都是对象 对象是不能直接在网络中传输的 所以我们需要提前把它转成可传输的二进制 并且要求转换算法是可逆的 这个过程我们一般叫做 序列化 这时 服务提供方就可以正确地从二进制数据中
  • 小程序——wxml组件和wxss适配

    一 和以往代码区别 wxml html zhuiy css view div text文字 加入这个可以长按选中 否则不能复制 image img button button form form input input label labe
  • Leetcode1333.餐厅过滤器——使用stream流

    文章目录 引入 本题题解 后记 int Integer List的互相转化 引入 在上周周赛中 有这么一道题 1333 餐厅过滤器 给你一个餐馆信息数组 restaurants 其中 restaurants i idi ratingi ve
  • Java远程调试原理与运用

    Java远程调试的原理是两个VM之间通过debug协议进行通信 然后以达到远程调试的目的 两者之间可以通过socket进行通信 首先被debug程序的虚拟机在启动时要开启debug模式 启动debug监听程序 jdwp是Java Debug
  • c语言——链表——多项式相加

    例题详解 一个多项式可以表示为二元组序列 a1 e1 a2 e2 an en 其中ai表示第i项的系数 非零值 ei表示第i项的指数 编写函数建立多项式链表实现一个多项式的输入 按指数从高到低有序 返回链表的头指针 3 编写函数实现两个多项
  • 【Kaggle】关于Kaggle永久保存Output & 如何关闭页面后在Kaggle后台运行程序的问题

    其实在创建一个notebook的时候上面的说明的代码已经讲到了 需要创建一个new version才能永久保存Output结果 否则就是临时保存 关掉页面就会删除 This Python 3 environment comes with m
  • 2023mothercup妈妈杯数学建模挑战赛思路

    先占坑 本人于2019年开始接触数学建模 参加了大大小小几十场数学建模比赛 本次mothercup也会持续陪跑 为大家提供免费的文字思路和视频思路 后续还有代码和参考文章等 2023年Mathorcup数学建模竞赛A题 比赛开始后第一时间更
  • swift:使用cocoapods引入Alamofire

    1 打开终端 Terminal 安装cocoapods 回车运行 抛出如下的异常 上网查了一下 这是墙外的网站 我们墙内的访问不了 这时候我们就要更换cocoapods的来源 如果gem的版本太旧 就执行如下命令更新一下gem 以下是更新成
  • vue router-view使用详解

    这里写目录标题 一 介绍 二 使用方法 1 实现效果 2 代码 一 介绍 router view组件作为vue最核心的路由管理组件 在项目中作为路由管理经常被使用到 vue项目最核心的App vue文件中即是通过router view进行路
  • 设置Tomcat默认访问路径

    步骤 1 打开server xml 在的上一行添加内容格式如下
  • 电脑关机一段时间后不能网络唤醒WOL

    一直以来 想实现远程开机的功能 后来经过NAT 花生壳DDNS的设置 可以通过一台常年开机的主机 来控制其他机器的开关机 但新的问题来了 就是电脑关机一段时间后不能网络唤醒WOL 按照网上教程 关闭了网卡的环保选项 在主板里也设置了WOL相
  • UE4_C++访问蓝图里的变量

    有没有碰到这样的问题 之前的同事用 连连看 实现了项目的逻辑 后续你要维护推展项目的开发 但头疼的是 你是个coder not 连连看 玩家 这时候how to do it UE4 C 访问蓝图里的变量 c 获得BP的方式 在访问蓝图变量之
  • GTest基础学习-04-第3个单元测试-测试夹具test fixture

    这篇来学习一下Gtest中更高级一些的特性test fixture 测试夹具的基本上使用 什么的场景需要使用到测试夹具呢 测试夹具是哪个宏 这篇来学习这个主题 1 什么叫test fixture 什么是测试夹具 这个概念在任何xUnit系列
  • 工厂车间设备智能化管理系统软件

    工厂车间设备智能化管理系统软件 在面对疫情这样的严峻挑战下 制造业企业和工厂开始走向精细化和智能化的管理模式 如今有不少的工厂采用智能化的管理模式 统筹人事 客户 采购 订单 车间 物料 仓储 工艺等板块 而这样的一款智能工厂管理系统 应该
  • C++:这门语言优势在哪?命名空间以及缺省参数?

    文章目录 C 的优势 解决命名空间的问题 缺省参数 C 的优势 C 和C语言比起来有许多优势 这里我们先举一个例子 后续进行补充 解决命名空间的问题 首先看这样的代码 include