c++命名空间(贰)(代码片段)

KookNut39 KookNut39     2023-02-27     334

关键词:

有关C++命名空间的概念,已经写过一篇了,但是这一块感觉有很多可以说的东西,想起啥就说点啥吧,昨天我们说的那篇文章的开头就说了using namespace std的例子,为什么写了这个语句之后,我们写cout等东西就不需要写命名空间的作用范围了,比如std::cout变成cout,是因为当我们使用using声明的时候,相当于说告诉当前的cpp文件,接下来的作用域范围内,std这个namespace已经属于你了,而我们会遇到比较长的namespace的名字,比如昨天的:

namespace namespace_1 
	void func() 
		std::cout << "namespace_1" << std::endl;
	

这种情况下,我们为了偷懒,可以直接在main函数里面写上我们将要用的namespace的名字,比如:

using namespace namespace_1;
int main()

	func();//call namespace_1::func()
	//namespace_2::func();
	//func();// func is undefined

这当然是没什么问题,但是接下来如果我们是把namespace_2也如此声明,并且两者里面都定义了名叫func的函数,那么会怎样呢?

using namespace namespace_1;
using namespace namespace_2;
int main()

	func();//call namespace_1::func()
	
	//func();// func is undefined
	

我们可以看到这里产生了二义性,编译器不知道该去调用哪一个func了

这种情况下我们应该怎么办呢,我们可以考虑使用using来指定我们需要使用的操作:

using namespace namespace_1;
using namespace namespace_2;
int main()
	using namespace_2::func;
	func();//call namespace_2::func()
	
	//func();// func is undefined
	


这种using的用法就是告诉编译器,下面用到的func都来自我的namespace_1的命名空间。我一般是不会去这样操作的,我会直接使用namespace本身的名字去指定想要调用的函数,这样也增加了别人读你代码的可读性,这里只是分享一下可以使用的处理办法。

内联命名空间
内联命名空间这个东西是C++11的新标准,属于嵌套命名空间,可以直接使用外层的命名空间进行访问内部的成员或者function,还是举个例子来看:

/*test_namespace_1.hpp*/
#pragma once
#include<iostream>


namespace namespace_1 
	inline namespace ns_1 
		void func_inline() 
			std::cout << "ns_1" << std::endl;
		
	
	namespace ns_2 
		void func() 
			std::cout << "ns_2" << std::endl;
		
	
	

我们可以看到在这个hpp中,我将ns_1最前面加了inline关键字,这就是告诉编译器,我这个命名空间是内联的,而下面的ns_2就没有这个关键字,我们来看一下main函数的调用情况:

int main()
	
	namespace_1::func_inline();
	namespace_1::ns_2::func();
	namespace_1::func();//namespace_1 has no member func()
	//func();// func is undefined
	

直接调用namespace_1下的func_inline是没问题的,因为这是内联中一个成员函数,但是如果直接调用func那就是会报错了。

时间不早了,今天先写这些吧,改日再写。
“Fear doesn’t need conquering. Fear tells you where the edge is.”

c++命名空间(贰)(代码片段)

有关C++命名空间的概念,已经写过一篇了,但是这一块感觉有很多可以说的东西,想起啥就说点啥吧,昨天我们说的那篇文章的开头就说了usingnamespacestd的例子,为什么写了这个语句之后,我们写cout... 查看详情

c++命名空间(贰)(代码片段)

有关C++命名空间的概念,已经写过一篇了,但是这一块感觉有很多可以说的东西,想起啥就说点啥吧,昨天我们说的那篇文章的开头就说了usingnamespacestd的例子,为什么写了这个语句之后,我们写cout... 查看详情

c++命名空间与缺省参数(代码片段)

目录命名空间为什么引入命名空间命名空间定义使用命名空间标准命名空间缺省参数缺省参数概念缺省参数分类全缺省参数半缺省参数命名空间为什么引入命名空间在C++中,变量、函数和类都是大量存在的,这些变... 查看详情

c++之命名空间(namespace)(代码片段)

目录1、什么是命名空间2、命名空间的定义3、命名空间的使用3.1、使用(using  namespace 命名空间名称) 直接全部展开到全局3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,... 查看详情

c++之命名空间(namespace)(代码片段)

目录1、什么是命名空间2、命名空间的定义3、命名空间的使用3.1、使用(using  namespace 命名空间名称) 直接全部展开到全局3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,... 查看详情

c++中命名空间的5个常见用法(代码片段)

...34495?_from=gitee_rec相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。命名空间在1995年被引入到c++标准中,通常是这样定义的:命名空间定义了新的作... 查看详情

小白学习c++教程十三c++命名空间namespace(代码片段)

@Author:Runsen文章目录访问命名空间嵌套命名空间命名空间别名任何C++程序都有声明namespace,比如下面的C++程序没有声明namespaceintmain()intvalue;value=0;doublevalue;value=0.0;编译器错误:'value' 查看详情

初步认识c++之命名空间详解(千字长文带你刨析你命名空间的细节)(代码片段)

初识c++之命名空间详解1.命名空间:namespace当我们使用命名空间的时候就会发现原本的报错就消失了!这就是命名空间的功能:==影响编译查找规则==!1.1域作用限定符::1.2命名空间的本质1.2.1命名空间中的变量!1.3命名空间的合... 查看详情

c++:命名空间缺省函数以及函数的重载(代码片段)

C++:命名空间、缺省函数以及函数的重载目录一、命名空间1.为什么要有命名空间?2.命名空间的定义方法3.命名空间的使用二、缺省参数1.缺省参数是什么?2.缺省参数的分类三、函数重载1.函数重载是什么?2.为... 查看详情

c++快速入门(命名空间,输入输出,缺省函数,函数重载)(代码片段)

C++基础命名空间C++输入&输出缺省参数函数重载命名空间命名空间的作用:看一个实际项目开发中可能遇到的问题,A程序猿在用C写代码是使用了n这个变量,B程序猿在用C写代码时也使用了n这个变量࿰... 查看详情

c++快速入门(命名空间,输入输出,缺省函数,函数重载)(代码片段)

C++基础命名空间C++输入&输出缺省参数函数重载命名空间命名空间的作用:看一个实际项目开发中可能遇到的问题,A程序猿在用C写代码是使用了n这个变量,B程序猿在用C写代码时也使用了n这个变量࿰... 查看详情

c++学习之初识命名空间(代码片段)

声明:           本人自学C++,没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方。如果有幸C++大牛能够扫到本人的博客,诚心希望大... 查看详情

c++基础学习笔记命名空间namespace的理解和使用(代码片段)

文章目录命名空间的概念命名空间的定义命名空间的正确使用方式命名空间的概念概念:在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能... 查看详情

c++入门(代码片段)

C++入门命名空间命名空间的定义命名空间的使用缺省参数重载名字修饰extern“C”引用引用的特性常引用引用做返回值引用和指针的区别内联函数命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的&#x... 查看详情

c++入门(代码片段)

C++入门命名空间命名空间的定义命名空间的使用缺省参数重载名字修饰extern“C”引用引用的特性常引用引用做返回值引用和指针的区别内联函数命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的&#x... 查看详情

c++命名空间(壹)(代码片段)

...之前的文章,希望未来能和大家共同探讨技术。本篇命名空间概念科普+例子介绍,后面可能会再写点相关的例子ÿ 查看详情

c++入门篇之关键字,命名空间,输入输出和函数重载(代码片段)

typora-copy-images-to:upload文章目录前言介绍C++关键字命名空间命名空间来由命名空间定义命名空间可合并命名空间的三种使用方法第一种第二种第三种C++输入&输出cin简单使用cout简单使用缺省参数概念全缺省参数半缺... 查看详情

c++基础一c++基础入门(20000字掌握c++基础知识)(代码片段)

文章目录1.C++关键字2.命名空间2.1什么是命名空间?2.2为什么需要命名空间?2.3如何定义命名空间?2.4如何使用命名空间?2.5深入理解命名空间3.C++输入&输出3.1如何区分C和C++文件3.2cin和cout详解... 查看详情