C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。,第1张

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”表示什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9813383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存