注:这篇文章是对【C++】一文搞懂C++中的std::是什么_c++ std::_狮子王量化的博客-CSDN博客的深入理解
a
a
a
解释:
在我们编写程序的时候,一般都会在开头这么写:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a;
}
第一行:用来通过头文件引入C++标准库<iostream>
第二行:用来将标准命名空间中的【函数+对象+变量】释放出来
a
a
总结1:【标准库】用来存放声明;【命名空间std所在的源文件】用来定义实现功能要用到的函数+对象+变量;【命名空间std】用来约束各个名称的作用域;
a
a
总结2:相当于第一行把以后要用的标准库引入,但是这个标准库的头文件只包含函数声明...,而函数的定义在标准命名空间std所在的源文件中,也就是说第一行我们已经把这些函数【std::cin】【std::cout】的声明加入函数的主程序了,这些函数是定义在命名空间所在的源文件中的,所以编译器在执行的时候会去链接这些函数定义所在的源文件,但是光找到定义所在的源文件也不行,因为在这个源文件中函数的定义是在namespace{}中的,调用namespace{}中的函数必须要加作用域,所以想要调用,必须加上他们所在的命名空间,或者直接using namespace std释放命名空间
【注1:源文件中函数定义在namespace{}之外的函数,才可以被编译器直接链接到】
【注2:而源文件中函数定义在namespace{}之内的函数,必须给被调用函数之前加上所属命名空间才可以被编译器直接链接到】
a
a
总结3:这个解释就挺不错的
来自:C++在namespace中和在头文件中定义函数有什么不同?_百度知道
a
a
a
举例:
例1:
#include <cstdio>
int main()
{
std::printf("卧槽,c++真有意思");
return 0;
}
使用的函数printf,就定义在命名空间std中
a
a
例2:
#include <iostream>
#include <string>
int main(){
//声明命名空间std
using namespace std;
//定义字符串变量
string str;
//定义 int 变量
int age;
//从控制台获取用户输入
cin>>str>>age;
//将数据输出到控制台
cout<<str<<"已经成立"<<age<<"年了!"<<endl;
return 0;
}
代码中的 string、cin、cout 都位于命名空间 std