好库网首页 | 我的好库
好库网 好库网社区
IT社区 » C/C++ » C++论坛 » [讲解] 为什么要加入 namespace std ?
回复 发帖

查看:1410    回复:1 [讲解] 为什么要加入 namespace std ?
访问bruceteen的空间
发表于 2011/4/1 14:26:55
1楼
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

namespace std // 注意这一句
{
ostream& operator<< (ostream& os, const vector<int>& coll)
{
    for(size_t i=0; i<coll.size(); ++i)
        os << coll[i] << " ";
    return os;
}
}

int main()
{
    vector<vector<int> > coll( 4, vector<int>(5,1) );
    copy( coll.begin(), coll.end(), ostream_iterator<vector<int> >(cout,"\n") );

    return 0;
}

问:为什么我将int换成自定义的类型,或将vector<int>包含于一个自定义的类型时,则不需要namespace std?
答:编译器会在 函数所在名字空间,及函数参数所在名字空间 内寻找最匹配重载。这里的copy,vector都在std名字空间内,所以编译器不会在全局名字空间内寻找ostream& operator<< (ostream& os, const vector<int>& coll),因此编译失败。对于int等内建类型,不算在任何名字空间内。
一旦出现了写在全局名字空间内的自定义类型,则也会在全局名字空间内寻找ostream& operator<< (ostream& os, const vector<int>& coll),因此可以编译通过。
访问demo10的空间
发表于 2011/4/2 19:56:24
2楼
不错,讲解得很详细!
您需要登录后才可以回帖 登录 | 注册
回复 发帖