首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

using namespace std 有副作用吗?解决思路

2012-03-23 
using namespace std 有副作用吗?请问用usingnamespacestd有副作用吗?如果我只是用到string那我只用usings

using namespace std 有副作用吗?
请问   用using   namespace   std有副作用吗?
如果我只是用到   string     那我只用using   std::string   会不会好一点?

[解决办法]
一般一个C++的老的带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。

但唯独string特别。
问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如楼主提到的strcmp。
这个头文件跟C++的string类半点关系也没有,所以 <string> 并非 <string.h> 的“升级版本”,他们是毫无关系的两个头文件。
要达到楼主的目的,比如同时:
#include <string.h>
#include <string>
using namespace std;
或者
#include <cstring>
#include <string>

其中 <cstring> 是与C标准库的 <string.h> 相对应,但裹有std名字空间的版本。

[解决办法]
如果我只是用到 string 那我只用using std::string 会不会好
============================
nod
[解决办法]
哈哈,老菜引用了俺的旧回复。^_^
就可惜文不对题,估计楼主都要晕了。:P
[解决办法]
编译也许慢一点点,极低的可能性增加重名冲突。
BCB下,也许会造成引入的名字太多,编译器崩溃。
反正,我都是默认用using namespace std;遇编译器崩溃才把那个文件该用using std::。。。
[解决办法]
用 using编译指令(例如:using namespace std;) 和用 using声明(例如:using std::cout;)是不一样的,他们之间的区别在于编译的时候,假如名称空间和程序中有相同的标识,那么使用 using声明 会发生冲突,而使用 using编译指令 则不会发生冲突,在程序使用局部标识的范围内,将把名称空间中的标识隐藏(就像局部变量隐藏全局变量一样),这也正是容易发生错误的地方.毕竟像下面这样的程序会令人头疼:

{
int x = 1;
std::cout < < x;
{
std::cout < < x;
int x = 2;
std::cout < < x;
{
int x = 3;
}
std::cout < < x;
}
std::cout < < x;
}

不过话说回来,一般的小程序用 using编译指令(using namespace std;) 就可以了,不过还是强烈建议使用 using声明的形式,其实最好的用法是像上面的程序一样(使用std::cout的形式).

热点排行