c和c++的区别
c有冲突问题
c++的命名空间解决了命名冲突问题
例
命名空间的作用域问题
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
//释放命名空间(c语言有命名冲突问题)
using namespace std;
namespace wang
{
int rand = 0;
}
int main()
{
printf("hellow world\n");
printf("%p\n",rand);
//域作用限定符
printf("%p\n",wang::rand);
}
命名空间的使用
命名空间的定义
命名空间内可以定义变量、函数、类型
namespace wang
{
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
}
调用自定义作用域的内容
方法一:说明调用的空间
//调用
printf("%p\n", wang::Add(1,2));
struct wang::Node node;
方法二:展开命名空间
但是全部展开可能有冲突的问题
using namespace wang;
using wang ::Add;
命名空间可以套命名空间(一般是两层)
例
namespace wang
{
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
namespace zhang
{
int rand = 9;
}
}
int main()
{
//调用
printf("%p\n", wang::zhang::rand);
return 0;
}
命名空间和头文件
std是c++标准库的命名空间
命名空间的展开是命名空间 的授权
头文件#include<>过去相当于是拷贝过去了
c++查找网站
PS.
命名空间会自动合并
比如
建一个Stack.h的头文件
#pragma once
namespace wang
{
void StackIntit()
{
cout << "void StackIntit() " << endl;
}
}
再建一个Queue.h的头文件
#pragma once
namespace wang
{
void QueueIntit()
{
cout << "void QueueIntit() " << endl;
}
}
调用
两个命名空间同名,但是没有报错
using std::cout;
using std::endl;
#include"Stack.h"
#include"Queue.h"
int main()
{
wang::StackIntit();
wang::QueueIntit();
return 0;
}
cout
<<流插入运算符
cin
>>流提取运算符