std:就是standard的缩写,标准的意思,就是标准库。
namespace就是名空间。名空间的作用呢,就是让函数多个名字属性。
大家都用C++写程序,那这么多人,写的函数名,也就变得很多了。
比如,写个函数void Display();作用就是显示点东西。
张三写的呢,就可以用名空间(namespace):
namespace Zhangsan
{
void Display();
}
李四写的呢,就可以
namespace Lisi
{
void Display();
}
我想用张三的,就调用
Zhangsan::Display();
李四呢,就调用
Lisi::Display();
举个例子吧,我们的名字,有很多时候会重名,比如张三
世界上可能有几十几百个张三
我们的世界里当然可以用身份z号码来分啦,但在没有身份z的时代怎么分呢
有办法的,比如,可以在名字前面加上地方名,如
广东的张三
上海的张三
同样的道理,我们在编程时,不同的程序员可能都会喜欢用同样的名字来表示相同的东西,如,大家可能都会用dog来表示狗类好了,现在有好几位程序员都写了dog类,可能各自的功能不同或相同就好比好几家人都养了条狗一样好了,在程序调用时,编译器傻了,它不知道该拉哪家的狗出来响应呀!
怎么办哦,让我们在狗前面加上namespace(名字空间)以示区分,好了,于是程序中就有了
张三 的 狗
李四 的 狗
啰嗦了一大堆,该说回来了
std::
std表示是C++的标准命名空间,就是编译系统自带有的,按C++标准定义好了的。
:: 书写格式
比如,在使用输出std::cout时,如果它达不到我们想要的效果,我们也可以自己定义一个名字空间,
取名myspace,再在这个空间里写一个cout函数来实现调用时,就成了myspace::cout
使用std命名空间
98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题。举一个实例,请注意以下两个头文件:
// oneh
char func(char);
class String { };
// somelibh
class String { };
如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如:
// oneh
namespace one
{
char func(char);
class String { };
}
// somelibh
namespace SomeLib
{
class String { };
}
现在就算在同一个程序中使用String类也不会发生冲突了,因为他们分别变成了:one::String()以及Somelib::String()
这样,就可以通过声明命名空间来区分不同的类或函数等了。
比如C++标准库定义了命名空间:std,其中包含容器vector,示例如下:
#include "stdafxh"
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char argv[])
{
const int arraysize = 7;
int ia[arraysize] = {0,1,2,3,4,5};
file://定义容器vector
vector<int> ivect(ia,ia+arraysize);
vector<int>::iterator it1 = find(ivectbegin (),ivectend (),4);
if(it1 == ivectend ())
cout<<"4 not found "<<endl;
else
cout<<"4 found "<<it1<<endl;
return 0;
}
输出结果为:4 found 4
龙行虎步的伟岸英姿;
using namespace std指调用命名空间std内定义的所有标识符。
使用“using namespace std”后,命名空间中的标识符就如同全局变量一样。
由于标准库非常大,程序员可能会选择类的名称或函数名称,就像它是标准库中的名称一样。因此,为了避免这种情况导致的名称冲突,标准库中的所有内容都放置在命名空间Std中。
但这将带来新的问题:无数的原始C语言代码依赖于伪标准库中的功能,这些功能已经使用多年,都在全局空间中。
所以就有了诸如<iostreamh>和<iostream>这样的head文件,一种是与以前的C语言代码兼容,另一种是支持新标准。
扩展资料:
C语言中调用using namespace std的意义:
1、在同一命名空间、相同作用域中,任何名字须具有唯一性。
2、每个结构和联合内部都有自己的命名空间(独立于其他空间)。
3、结构标签、联合标签、枚举标签共用一个命名空间(独立于其他空间)。
4、goto使用的标签名,只要在同一函数内部唯一(独立于其他空间)。
5、所有其他情况共用一个命名空间,如变量、所有枚举常量、typedef定义的别名等(独立于其他空间)。
参考资料来源:百度百科-namespace
问题解决了,一个window程序,如果不调用AllocConsole是没有standard, in,out,errer的,但是,如果是从一个console父进程创建,并在调用CreateProcess时,把STARTUPINFO的hStdOutput赋予一个管道的hWrite,那么即使wtl子进程不调用Allocconsole,调用GetStdHandle(STD_OUTPUT_HANDLE)就会获得这个hStdOutput,然后就可以输出到父进程的console了!
以上就是关于C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。全部的内容,包括:C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。、在c++中‘命名空间’是什么意思‘std::’是什么意思谢、C++中“using namespace std”表示什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)