C++入门知识
文章目录
C++是一门细节很多的语言,不太好学。我们从开始就要认真地学习它的这些细节,后续的学习才不至于十分吃力懵逼。
C++关键字
C++总共有63个关键字,因为C++本身兼容C语言,所以C++的63个关键字里面包括了C语言的32个关键字。这63个关键字都是啥呢,看下面的图。
这篇文章我们主要讲解入门知识,对于上述每个关键字我们就不具体展开讲了,随着学习的深入我们会逐渐了解这些关键字的。
命名空间
我们如果看过c++代码的话,会经常看到下面这段代码
using namespace std
这里的代码是什么意思?我们等会再说。
还有我们在写c语言代码的时候会经常出现命名冲突。例如:
#include<stdio.h>
#include<stdlib.h>
int rand=0;
int main()
{
printf("%d",rand);//这里会报错,因为全局变量会与库函数里面的rand冲突。
return 0;
}
出现了命名冲突就得改名字了,改名字太麻烦了,如果变量和函数经常使用那么改名字将会非常令人头疼。
C++为了解决命名冲突,引入了namespace这个关键字。
#include<stdio.h>
#include<stdlib.h>
namespace mll
{
int rand=0;
}
int main()
{
printf("%d",rand);//现在不会报错了,但是会打印出一个很大的数,这个数字是什么呢?
return 0;
}
这个数字就是rand函数的地址。为什么没报错呢?我们知道在同一个作用域里不能有同名的变量或函数或者类型。这里没报错说明,我们定义的变量rand与rand函数没在同一个作用域,观察代码不难推测rand可能被“关起来了”关到了mll这个空间里。
那么我们该如何把我们定义的rand打印出来呢?
printf("%d",mll::rand);
这样就可以打印出来我们定义的变量rand的内容0.其中::是域作用限定符,它可以告诉编译器打印的rand是mll空间里的那个rand。
尽管这样我们还是无法避免这样一种情况
张三,李四同属ww公司,同时做一个项目,张三负责链表,李四负责队列,于是张三写了这样一段代码
namespace ww
{
struct ListNode
{
int val;
struct ListNode * next;
} ;
}
李四写下了这样一段代码
namespace ww
{
struct ListNode
{
int val;
struct ListNode * next;
struct ListNode * pre;
} ;
}
最后会怎么样呢。
**首先同名命名空间编译时会被合并。**合并的时候该怎么合并呢,有两个结构体类型都叫 ListNode该丢掉那个留下那个呢?
但是在实际中很难避免上述情况,我们该怎么办呢?这就需要用到命名空间的嵌套了。
在C++中命名空间可以嵌套。
如果出现上述情况我们只要在命名空间里再定义一个命名空间就可以了
张三
namespace ww
{
namespace zs
{ struct ListNode
{
int val;
struct ListNode * next;
};
}
}
李四
namespace ww
{
namespace ls
{ struct ListNode
{
int val;
struct ListNode * next;
struct ListNode * pre;
};
}
}
这下我们就可以把这个命名冲突的问题解决的差不多了。但是新的问题又来了,每次使用这些变量,函数,类型的时候都得指定命名空间确实是好麻烦呀,我们可以用什么方法呢?