关于命名空间的一个疑问
一般在程序开头写上
#include <iostream>
using namespace std;
就可以在程序里面直接用cin和cout了
but
如果我在开头include了例外一个头文件<myheadfile>,在<myheadfile>的mystd名字空间里,我也有一个我自己写的cin和cout函数,如果要同时用到这两个不一样但名字相同的函数,那怎么办using namespace是不是不能用了(因为一旦用了,虽然可以直接在main里写cin,cout,但是系统不知道你要用的是哪个名字空间里的)是不是应该这么写,才能达到分清楚的目的?:
#include <iostream>
#include <myheadfile>
//using namespace std; 这两句话是不是已经可以不用了,因为用了会造成混乱?
//using namespace mystd;
int main()
{
std::cout<<"it is from iostream"<<endl;
mystd::cout<<"it is from mystd"<<endl;
return 0;
}
先谢谢!
[解决办法]
可以用,但是不能不加限定的使用cout.
#include <iostream>
#include <myheadfile>
using namespace std; 这两句话是不是已经可以不用了,因为用了会造成混乱?
using namespace mystd;
int main()
{
std::cout<<"it is from iostream"<<endl;//可以
mystd::cout<<"it is from mystd"<<endl;//可以
cout<<"haha "<<endl;//不可以
return 0;
}
[解决办法]
[解决办法]
正解,命名空间就是为了解决名字相同的冲突的,它让你给任何一个名字加了一个使用的空间域。控制名字域的使用范围可以用{}来限定。同样,使用多个域时要避免名字污染,就是楼上大神所说的。提一点,
- C/C++ code
::name;//name是变量
[解决办法]
和楼主想的差不多,基本也正确了
只是如果要using其中一个也是行的
比如
using namespace mystd;
之后
std::cout必须显示声明名字空间
cout没名字空间版,自动解析成mystd::cout
[解决办法]
[解决办法]
using namespace mystd
[解决办法]
用了就会有重定义
[解决办法]
[解决办法]
一句话,名字空间,就是让你省去写前缀的麻烦,但是,如果两个空间成员有冲突,编译器就不知道你用的哪个空间下面的成员了,和头文件也不能冲突