C++中std命名空间是什么概念?作用是什么?为什么要引入它,而不像C中的printf那样呢?怎么实现的啊?
2个回答
展开全部
首先说一下printf吧,在最早的C语言的时候,由于不是面向对象,所以所有的函数都是唯一的!也就是说你打印的话,就必然会使用printf函数,当然了,你也可以操作更底层的代码,但是一般人不会那么干的,所以PRINTF就属于唯一的函数。
后来C++出现了,并且出现了STL或者一些其他面向对象的概念和函数。那么就会出现你写的函数和系统提供的函数会发生冲突,例如你可以自己写一个sort()函数来进行排序,但是STL里面也提供了sort()函数进行排序。并且如果你调用sort()函数的话,那么系统到底是调用你写的函数呢,还是调用STL的函数呢?这就需要到命名空间了。
如果你直接sort()的话,那么可能是调用你写的函数。
但是如果你std::sort()的话,就是调用STL中的排序函数。
命名空间说白了,就是有多个同名函数,或者变量。用命名空间来区分这些同名的变量和函数。
后来C++出现了,并且出现了STL或者一些其他面向对象的概念和函数。那么就会出现你写的函数和系统提供的函数会发生冲突,例如你可以自己写一个sort()函数来进行排序,但是STL里面也提供了sort()函数进行排序。并且如果你调用sort()函数的话,那么系统到底是调用你写的函数呢,还是调用STL的函数呢?这就需要到命名空间了。
如果你直接sort()的话,那么可能是调用你写的函数。
但是如果你std::sort()的话,就是调用STL中的排序函数。
命名空间说白了,就是有多个同名函数,或者变量。用命名空间来区分这些同名的变量和函数。
追问
明白了。再请教一下,系统是如何识别命名空间的,
为什么是std::这样的写法,为什么不是别的写法呢?
这个好像涉及的深且意义性不是很大了吧。
想知道,望解答!
追答
好,我继续给你解答一下。你知道C++中的类吗?类中不是有静态函数吗?如果你访问类的静态函数你是怎么访问?肯定是 类名::静态函数名 这样访问把?其实STD的原理和这个是一样的。或者说你自己也可以构造一个所谓的命名空间。例如:
struct Mystd
{
void function1();
void function2();
}
然后你就可以Mystd::function1()这样来访问Mystd中的函数了。这里的Mystd和std的原理是一样的。C++无非就是把一些函数封装到了std这个结构体中!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询