| 查看:160 回复:1 | [讲解] 为什么要加入 namespace std ? |
|
bruceteen
![]() |
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
![]() |
2楼
不错,讲解得很详细!
|