您当前的位置:周俊奇博客 > 项目

C++命名空间using声明使用示例详解

时间:2022-12-06 09:11:28

c++在开发的过程当中需要使用到库函数,那么基于库函数的使用最初的流程是:1、include 相关的头文件,比如:iostream,string。 2、使用命名空间::库函数,比如:std::cin,std::cout,但是这样写总是有点麻烦的,所以可以尝试简化写法,就是using声明。

QQ截图20220914092636.png

注意,这里的 :: 是作用域运算符,就是用来指向命名空间空间当中的方法的。

最初的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内定义的所有标识符,其实代码当中没有用到那么多。

标签: C++