编程语言
首页 > 编程语言> > C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

作者:互联网

概述

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

举个例子:

#include <stdio.h>
#include <stdlib.h>

int rand = 10;

int main()
{
	printf("%d", rand);
	return 0;
}

程序编译的结果显示rand重定义了,为什么会这样呢?因为在stdlib.h这个头文件中已经定义了rand这样一个函数,这样就导致了编译器不知道这是一个函数还是一个变量,C语言中无法应对这种冲突,只能通过改名字来避免。

而C++为了解决这个问题,引入了命名空间的概念。

命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

//命名空间
//A就是命名空间的名字
namespace A{
	int a;
	void func()
	{}
}

注意事项:

接下来给一个完整的代码块来展示命名空间的注意事项和使用:

#include<iostream> //引入头文件
#include<string>//C++中的字符串
using namespace std; //标准命名空间
//A就是命名空间的名字
namespace A
{	
	//命名空间内既可以定义变量也可以定义函数
	int rand = 10;
	int Sub(int x, int y)
	{
		return x + y;
	}
	struct ListNode
	{
		int data;
		struct ListNode* next;
	};
}
//命名空间的嵌套定义
namespace B
{
	int rand;
	namespace C
	{
		int rand;
	}
}
//命名空间是开放的,随时可以加入新成员,但是新成员只能在加入后使用
namespace B
{
	int c;//此时c会合并到命名空间B中,实际上就是个合并的过程
}
//匿名命名空间
namespace 
{
	int d = 5;//命名空间没有名字,就类似于static int d = 50,是个静态全局变量,别的文件无法使用
}
int main()
{
	//命名空间的使用
	//1.::作用域限定符
	//访问A空间的Sub函数
	cout << A::Sub(10, 20) << endl;
	//2.访问嵌套空间
	//访问B空间的C空间的rand变量
	B::C::rand = 5;
	cout << B::C::rand << endl;

	system("pause");
	return EXIT_SUCCESS;
}

using关键字

引入using关键字之后,命名空间的使用又变得不一样

namespace A
{
	int a = 10;
}
void test01()
{
	//using声明的意思就是让命名空间中某个标识符可以直接使用
	using A::a;
	cout<<a<<endl;
}

注意:

1.使用using声明,就不会每次写A::a了,直接用a就可以

2.using A::a声明的意思就是把变量a又在test函数中定义了一次,此时如果在test内部再定义一个int a;就会出错

namespace A
{
	int a = 10;
}
using namespace A;
void test01()
{
	cout<<a<<endl;
}

使用using关键字修饰namespace整个命名空间,实际上就是脱去了这个命名空间的外衣,就等价于你定义了一个int a在全局

思考一个问题:下面代码有错吗?

在test01函数体内又定义了一个int a,会报错么?如果不报错,那么输出的是全局的 a = 10 还是局部的a = 20?

namespace A
{
	int a = 10;
}
using namespace A;
void test01()
{
	int a = 20;
	cout<<a<<endl;
}

答案是不会报错,输出的是局部的20,因为命名空间A内部的变量a在使用using关键字后相当于在全局定义了一个int a ;而在函数体内定义一个局部的 int a;两个变量的作用域不同,是可以定义同名变量的,输出的是局部变量的值,小伙伴的要注意区分~

C++输入和输出

标签:c++,输入,文件,方法,编程,设置,代码,安装,链接,下载,压缩
来源: