现在我们开始进入cpp的学习,我们首先要介绍的是命名空间(namespace),这是一个关键字。
我们自己定义的变量、函数可能跟库里面重名冲突。当进入公司项目组,多人协作,同事之间写的代码可能存在命名冲突。而c语言没有好的办法解决这一问题,因此,cpp提出了一个新语法,命名空间。
#include<stdio.h>
#include<stdlib.h>
//定义一个叫qwe的命名空间 -- 域
namespace qwe
{
//他们还是全局变量,放在静态区
int rand = 0;
int a = 1;
}
int main()
{
printf("%d\n", rand);
printf("%d\n", qwe::rand);
return 0;
}
这里的rand如果不指定命名空间域的话,就和库里面的rand函数命名冲突了。当然,命名空间中也可以定义变量、函数、类型
namespace qwe
{
//命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
}
当然,命名空间可以嵌套
namespace N1
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N2
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
那么,命名空间如何使用呢?这里我们需要知道域作用限定符 :: 。在c语言阶段我们已经知道了一些。
int a = 0;
int main()
{
int a = 1;
printf("%d\n", a); //1
printf("%d\n", ::a); //0
return 0;
}
知道了这些,我们理解起来应该会很轻松。
int main()
{
qwe::rand = 20; //变量
struct qwe::Node node; //结构体的调用稍微有点区别
qwe::Add(1, 2); //函数
N1::Add(1, 2);
N1::N2::Sub(3, 4); //嵌套命名空间的调用
struct asd::ListNode ln; //命名空间在头文件中也一样
asd::ListInit();
return 0;
}
全部展开也是可以的,展开一部分也是可以的
using namespace asd;
using asd::ListNode;
接下来就是我们初学者常见的代码了
#include <iostream>
using namespace std; //C++库的实现定义在一个叫std的命名空间
int main()
{
cout << "hello world" << endl;
return 0;
}
还有这样的
#include <iostream>
int main()
{
std::cout << "hello world" << std::endl;
return 0;
}
这样的
#include<iostream>
using std::cout;
using std:: endl;
int main()
{
cout << "hello world" << endl;
return 0;
}
到这里我们已经能看懂这些代码的大概了
下面我们来简单介绍下cout、endl和cin
#include<iostream>
using namespace std; //练习的话我们全部展开好了
int main()
{
cout << "hello world" << endl;
cout << "hello world\n";
printf("hello world\n");
int i = 10;
double d = 1.11; //cout 流插入
cout << i << " " << d << endl; //自动识别类型
cin >> i >> d; //流提取
cout << i << " " << d << endl;
return 0;
}