C++ 命名空间 using声明使用示例详解
作者:老边
正文
c++在开发的过程当中需要使用到库函数,那么基于库函数的使用最初的流程是:1、include 相关的头文件,比如:iostream,string。 2、使用命名空间::库函数,比如:std::cin,std::cout,但是这样写总是有点麻烦的,所以可以尝试简化写法,就是using声明。
注意,这里的 :: 是作用域运算符,就是用来指向命名空间空间当中的方法的。
最初的c++代码写法
#include <iostream> int main(){ std::cout << "hello world" << std::endl; return 0; }
在这段代码当中,我们引入了iostream文件,cout和endl函数在iostream下的std当中,所以需要采用std::cout和std::endl的方法使用功能。
但是如果代码量巨增,这样的写法还是繁琐的,那么这个时候就可以采用using方法了,代码如下:
#include <iostream> int main(){ using std::cout; using std::endl; cout << "hello world" << endl; return 0; }
这段代码当中,比上面的代码多了两行using方法,但是如果下面使用cout和endl方法的语句比较多的话,就可以省力很多了。但是上面的写法必须把所有的需要的方法都显式的声明出来,比如:
#include <iostream> int main(){ using std::cout; cout << "hello world" << endl; return 0; }
这里声明了cout,但是在使用的过程当中,除了count还使用了endl,那么这个时候是会报错的
main.cpp: In function ‘int main()': main.cpp:5:29: error: ‘endl' was not declared in this scope cout << "hello world" << endl; ^ main.cpp:5:29: note: suggested alternative: In file included from /usr/include/c++/4.8.2/iostream:39:0, from main.cpp:1: /usr/include/c++/4.8.2/ostream:564:5: note: ‘std::endl' endl(basic_ostream<_CharT, _Traits>& __os) ^
那么有没有更加简单的写法,我们可以尝试直接using 整个std
#include <iostream> int main(){ using namespace std; cout << "hello world" << endl; return 0; }
那么我们来聊聊using到底是干什么的:
在聊using之前,先搞清楚一个概念,就是命名空间,命名空间是C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。而作用域就是定义一个量,这个量在代码当中起作用的范围。
那么接下来看using,using是用来声明命名空间的,声明命名空间实际上就是把指定的标识符加载到当前的作用域当中,直接使用。
但是这里有几个思考的点:
1、在学习c++的时候有一类文件叫做头文件,就比如刚才案例当中导入的iostream,在这类文件当中尽量不要使用using,因为来回包括太多隐式的变量,容易导致变量冲突。
2、using声明的一定要是include加载的,所以要卸载include的后面。
3、using写在代码的不同位置,产生的效用也是不一样的,这个需要结合作用域来详细理解(挖个坑,后来填上)
4、个人感觉using std::cout 写法上确实比 using namespace std要繁琐,但是使用的变量更加精确,因为using namespace std调用命名空间std内定义的所有标识符,其实代码当中没有用到那么多。
关于using先总结这么多,更多关于C++ 命名空间using声明的资料请关注脚本之家其它相关文章!