C++中,头文件与命名空间的关系,第1张

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

有些书说有些头文件不在std里是什么意思?std里包含些什么?为什么不用std就不能使用cout?头文件中声明的东西为什么在使用的时候需要先using namespace std;一下?

解析:

######################################

有些书说有些头文件不在std里是什么意思?

######################################

那些书那样说会造成困惑,因为名字空间,就像函数、

结构、类等等,是用代码来表达的一种语言机制。

std(standard的缩写)是标准C++里必须存在的一个

名字空间的名字。所有实现标准C++的编译器都

必须确保这空间的存在。

名字空间声明是这样表达的:

namespace x {

创建新名字

}

x是该名字空间的名字。

头文件装代码,代码表达名字空间。

所以应该说“有些头文件的内容不在std里”。

具体的意思就是,在那些头文件里,

没有任何代码是在“namespace std { }”的括号里的。

######################################

std里包含些什么?

######################################

std里包含标准C++库里的所有名字(类名、

函数名、)。

######################################

为什么不用std就不能使用cout?

######################################

不是不能使用,只是不能直接写cout,必需用空间名和

名字空间限制符作为前缀,写成std::cout。

用某个名字做名字空间声明的时候,若已有同名的

名字空间存在,就是仅仅把括号里的名字加进去,

否则先创建空间,后加入括号里的名字。

加入名字空间后的名字都是对全局空间隐藏的,

但该名字空间的名字却不隐藏(除非该空间在另一个

名字空间里)。

cout隐藏在std里,但std本身不隐藏,所以

你“#include<iostream>”了之后,不必做

使用声明便可直接用std,通过它访问cout。

若你做了使用声明,对该使用声明所处的作用域的隐藏便

被抵消(作用域的开端到声明之间的那段除外),

即不必使用空间名和名字空间限制符作为前缀。

######################################

头文件中声明的东西为什么在使用的时候需要

先using namespace std;一下?

######################################

你已经知道做使用声明是要讨个方便而不是一种必要。

我们作个总结性的复习吧。

(A)这简单的程序里只有全局和局部空间,没有其它的名字空间:

void main( ) {

std::cout << ""; 错误:std不存在。

cout << ""; 错误:std不存在cout就不用提了。

}

(B)这个则多了一个叫std的名字空间。std这名字也可见了:

#include<iostream>

void main( ) {

std::cout << ""; OK:可通过std骚扰cout。

cout << ""; 错误:cout仍然被包在std里面,不可见。

}

iostream头文件里有std的声明。在编译之前,

预处理器会用iostream里的全部内容来代替

“#include<iostream>”这个预处理器指示符。

效果是,这程序包含iostream里的所有代码。

include是包含的意思。

包含指示是在全局空间里,所以在指示之后的任何地方,

std这个名字是可见、可访问的。

(C)这个不包含声明std的代码却尝试打开std包,

落了个跟(A)一样狼狈的下场:

using namespace std;

void main( ) {

std::cout << ""; 错误:std不存在。

cout << ""; 错误:std不存在cout就不用提了。

}

(D)这个声明了std(曝露了std)并把std打开,

让里面的名字(cin、cout、cerr、)跟

std一样暴露。

[相信你闭上眼都能写出这段代码了]

如同名字一样的意思,NameSpace:名字空间,之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用using namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的这样一来就不会引起不必要的冲突了

前缀的单词有:part,prefix。

前缀的单词有:prefix,part。拼音是:qiánzhuì。注音是:ㄑ一ㄢ_ㄓㄨㄟ_。结构是:前(上下结构)缀(左右结构)。词性是:名词。

前缀的具体解释是什么呢,我们通过以下几个方面为您介绍:

一、词语解释点此查看计划详细内容

前缀qiánzhuì。(1)以结合形式出现,与一词、词根或短语开头的一个音或连续几个音相接,或书写中一个字母或连续几个字母用以产生出派生词或变化形式。汉语里指在词根前面的构词成分。如“阿哥”、“阿姨”中的“阿”。

二、引证解释

⒈加在词根前面的构词成分,如“老鼠”、“老虎”里的“老”,“阿姨”里的“阿”。

三、国语词典

加在词根前面的词素。如「老鼠」、「老虎」里的「老」字,「阿姨」里的「阿」字。

四、网络解释

前缀汉语里指在词根前面的构词成分。如“阿哥”、“阿姨”中的“阿”,英文中指一个英语单词可以分为三个部分:前缀(prefix),词根(stem)及后缀(suffix)。单词中位于词根前面的部分就是前缀。前缀,可以改变单词的意思。

关于前缀的成语

惩前毖后踌躇不前马前卒收残缀轶巴前算后搀前落后缀句成文缀玉联珠车在马前袭常缀琐

关于前缀的词语

巴前算后马前卒车在马前缀文之士搀前落后补缀乾坤踌躇不前袭常缀琐缀辞之士收残缀轶

关于前缀的造句

1、这时可以通过在该信息库加前缀名的办法来特指该信息库。

2、如果属性没有前缀,那么它就没有名称空间。

3、派生词缀可以是前缀也可以是后缀。

4、可能除了传递给最终用户的实际内容外,对所有来自您组织以外的词汇表的项都可用前缀。

5、名称空间前缀的使用是可选的,但是这更像是一种风格上的选择。

点此查看更多关于前缀的详细信息

1、a-/an-==no;without;lack,

amateur不熟练的,业余的,anonymous匿名的,asocial不好社交的,anechoic消声的,anharmonic不和谐的,anarchism无政府主义,acentric无中心的,amoral非道德性的,asexual无性别的

2、a-==in;on;at;by;with;to,asleep在熟睡中,ahead向前,在前头,abreast肩并肩地,aside在一边,abed在床上,abloom开花

3、a-/an-==加强意义,aloud高声地,aright正确地,awake唤醒,aweary疲倦的,annotate注释,announce宣布,通告

4、ab-==from;awayfrom,abnormal不正常的,abroad国外的,abuse滥用,absorb吸去,abaxial离开轴心的,abend异常终止

5、ac-==at;to,或表示加强意义,accustom使习惯,account计算,算帐,accredit信任,accompany陪伴,acclaim欢呼,喝彩,accomplish完成

标签: 前缀 名字 空间 词根 声明