cpp入门-命名空间,缺省参数

这篇具有很好参考价值的文章主要介绍了cpp入门-命名空间,缺省参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本小白不久前才刚开始学习c艹,众所周知,c艹是本贾尼祖师爷在使用c的时候遇到了诸多不便,便在对c进行扩展和改进后的得到的新语言,所以说这一篇博客就带来c艹对c的两个个优化点

命名空间

存在意义

当我们在使用C进行日常编程时不会有太多关于变量的烦恼。
但是当我们进行一些中大项目的编写时,就会遇到变量名重复的问题

变量重复有多种情况
1:全局变量与头文件变量重命名

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

当我们包含头文件,对头文件进行展开时
针对.h,没有h后缀的cpp标准库都对它们的变量放入了std命名空间中
其全部变量都会在展开的作用域中出现,导致我们命名变量可能会和头文件中的变量重命名。

2:定义了一样名字的变量。

#include<time.h>
#include<iostream>
int cout = 0;
int main()
{
	int a = 0;
	int a = 0;
	printf("%d", a);
}

当我们写项目时,往往是多个人合作,所以当写完的各个部分代码合并时,就有可能导致这种情况。

使用方法

所以我们的命名空间就在C艹中闪亮登场了。

#include<iostream>
using std::cout;
using std::endl;
int a = 0;
namespace test
{
	int a = 2;
}
int main()
{
	cout << a << endl;
	cout << test::a<< endl;
	//::是对特定的作用域进行访问的方式
}

其中的test就是我们自定义的命名空间
命名空间就好像一堵墙,将外面的作用域围了起来。
在不访问时,编译器不会去命名空间进行搜索。

这样使全局的a和围在test命名空间中的a也不会产生冲突
因为当打印全局a时,不会对test空间进行搜索
而使用::来特定访问test空间时,编译器只会对test空间进行单独访问。

同样,在命名空间也可以定义函数。

#include<stdio.h>
namespace test
{
	int add(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	printf("%d", test::add(1, 2));
}

命名空间嵌套

namespace test1
{
	namespace test2
	{
		int n2;
	}
}

命名空间是可以支持嵌套的,当我们想要取出test2的数据时

int main()
{
	printf("%d", test1::test2::n2);
}

就像结构体一样的逐个->一样。
嵌套通常需要对变量进行更近一步限制时使用。

相同命名域合并

还记得我们前面说的吗

针对.h,没有h后缀的cpp标准库都对它们的变量放入了std命名空间中

在c++标准库中,祖师爷把所有的头文件变量和函数全部放入了一个std的命名空间中
防止像C中引入头文件展开后就有大量变量导致非常容易与自己定义的变量重命名的情况发生。

就比如
在test1.h头文件中

	namespace test
	{
		int add(int x, int y)
		{
			return x + y;
		}
	}

在test2.h头文件中

namespace test
{
	int Sub(int x,int y)
	{
		return x - y;
	}
}

在源文件中

#include<stdio.h>
#include"test1.h"
#include"test2.h"

int main()
{
	printf("%d", test::add(1, 2));
	printf("%d", test::Sub(1, 2));

}

这样我们能清楚的看到,当我们使用相同名字的命名空间中,会进行合并。

c++标准库也同样是用这种方法进行合并的。
并且全都合并在了std这个命名空间中。

#include<iostream>
using namespace std;
int main()
{
	cout << "学CPP真是太开心啦!!" << endl;
}

展开命名空间

看到我们上面写的代码

using namespace std;

这串代码就好像让编译器跨国std的墙,进行变量搜索。
如果是在全局变量中展开,那就会将std的变量作用域调整至全局变量。
这个时候命名空间的优势将不存在,所以我们一般只在日常使用代码量较少的情况下展开。

推荐还是使用限制作用域访问

cout << test::a<< endl;

或者展开一小部分

using std::cout;
using std::endl;

这样就只展开了std中的cout与endl变量。

缺省参数

这也是C++较于C的改进部分。

#include<iostream>
int add(int x,int y)
{
	return x + y;
}
int main()
{
	std::cout << add(1, 2) << std::endl;

}

这是最普通的函数以及传参方式。

而C++特地优化了函数的定义方式。

int add(int x = 0,int y = 0)
{
	return x+y;
}
int main()
{
	std::cout << add() << std::endl;
}

在定义函数的时候,给参数传一个缺省值
当我们不给函数传参时,函数就会默认使用缺省值来进行运算

全缺省参数

顾名思义,就是给所有参数一个缺省值

int add(int x = 0,int y = 0)
{
	return x+y;
}

但是我们要注意
在我们传参的时候

std::cout << add(,2) << std::endl;

这样的形式是不可以的

对于缺省函数传参时只能从左往右传,不能跳着传

std::cout << add(1) << std::endl;

这样就代表给参数x传了1,而y使用缺省值赋值

半缺省参数

全缺省参数就是给每个参数都给缺省值,那半缺省参数就是给一半的缺省值。

意思我们是知道了

但是要怎么缺呢?
int add(int x =0,int y);
是从右到左吗?
如果这样的话,当我们只传一个参数时
std::cout << add(1) << std::endl;

这样编译器就不知道这个1是传给x还是y了。
因为按照语法设定,传参传的参数是从左到右的顺序的。
这样当然就会报错了

这样我们就得出了,半缺省是从左往右的
int add(int x,int y=0);

这样我们就得出了结论
参数传参不能用跳过,只能从右往左省略传参。
而函数给缺省值,则只能从左向右,因为传参设定是从左向左

ps:设置缺省,只能在声明函数时设定,不能在定义函数时设置。文章来源地址https://www.toymoban.com/news/detail-418535.html

//test.h
int add(int x,int y=0);
//come_true.cpp
int add(int x,int y)
{
	return x + y;
}

到了这里,关于cpp入门-命名空间,缺省参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++心愿便利店】No.1---C++入门(命名空间、缺省参数)

    👧个人主页:@小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C++ 心愿便利店 🔑本章内容:命名空间、缺省参数 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 ATT 贝尔实验室里开发出来,主要用于重新实现 Unix 操作

    2024年02月11日
    浏览(37)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(49)
  • 【开懂C++】命名空间 函数重载 缺省参数

    在编写C语言代码时,当工程较大时,很容易产生变量命名冲突的情况——一般有两种冲突的情况 1.变量名与库中的函数名、冲突 。 2.工程模块化搭建时不同文件的命名冲突 。 而C++为了优化这一缺陷,提出了命名空间的概念。 命名空间使用的是 namespace ,命名空

    2023年04月18日
    浏览(86)
  • C++中命名空间、缺省参数、函数重载

    目录 1.命名空间 2.缺省参数 3.函数重载 在C++中定义命名空间我们需要用到namespace,后面跟上命名空间的名字,结构框架有点类似结构体(如图所示) 上面的代码我一一进行讲解: 1.我们先来说第三行和main函数中的代码意思,第三行代码的意思是展开std库的空间,std是

    2024年01月23日
    浏览(44)
  • 【C++】命名空间、缺省参数和函数重载

    在一个大型的项目中,不同成员写的程序中会不可避免的带来 命名冲突 的问题,这种情况下命名空间可以很好的解决这种命名冲突大的问题,它可以用来避免不同的库或模块中的名称(name)发生冲突。 名称可以是变量、函数、类、结构、枚举等等。此外,命名空间可以让我

    2024年02月17日
    浏览(42)
  • C++:命名空间,缺省参数,函数重载,引用,内联函数

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C++》 本篇博客作为C++知识总结,我们来认识命名空间,缺省参数,函数重载,引用,内联函数。 那么在介绍命名空间时,我们先用C++的方式打印\\\"hello world\\\"。 其中,using namespace std; 就是一种命名空间的使用。 在

    2024年02月11日
    浏览(45)
  • 【C++】:C++关键字,命名空间,输入&输出,缺省参数

    C++总计63个 ,C语言32个。 ps:下面我们只是看一下C++有多少,不对进行具体的讲解。在以后的学习中会会了解的更深。 在C语言的语法中,有时候会遇到这样的情况: 我们的本意是创建一个全局的 rand 变量,再进行输出。那为什么会报错呢? 原因:

    2024年04月27日
    浏览(45)
  • 计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

    三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 目录: 前言: 本片博客是以学习过C语言之后进入C++学习为前提,讲解C++入门级知识,为C++之后的学习做铺垫 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀

    2024年04月11日
    浏览(129)
  • C++基础知识 (命名空间、输入输出、函数的缺省参数、函数重载)

    🌠 例1: #include iostream 标准输入输出 std 是 c++ 标准库的命名空间,将标准库的定义实现都放到这个命名空间中 using namespace std 展开 std 里的内容 cout   c 代表的是 console 控制台的意思, out 有输出的意思 流运算符 流插入 endl 等价于 \\\'n\\\' 在 c++ 中,变量、函数和类的名称存在于

    2024年02月15日
    浏览(41)
  • 开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)

    之前浅显的讲解了数据结构的部分内容:数据结构专栏 那么今天我们迎来了新的起点:C++的探索之旅 在c中: 严格的编译器会直接 报错 : rand我们都知道是产生随机数的函数,现在我定义了一个全局变量rand,显然是有 命名冲突 所以c++就提供了解决方案 想必学过c的大家第一

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包