2012年(158)
分类: C/C++
2012-11-26 16:00:48
// 代码来源于csdn.net,但去掉不相干内容
#include
#include
#include
#include
using namespace std;
namespace std // 注意这一句
{
ostream& operator<< (ostream& os, const
vector
{
for(size_t i=0; i
return
os;
}
}
int main()
{
vector
copy( coll.begin(), coll.end(),
ostream_iterator
return 0;
}
将int换成自定义类型,或将vector
因为编译器会在
函数所在名字空间,及函数参数所在名字空间
内寻找最匹配重载。这里的copy,vector都在std名字空间内,所以编译器不会在全局名字空间内寻找ostream& operator<<
(ostream& os, const vector
同样
#include
#include
struct v1 : std::vector
};
struct v2
{
typedef int reference;
};
int main()
{
std::vector
back_inserter( a );
// 因为 vector
v1 b;
back_inserter( b );
v2 c;
back_inserter( c ); //
报错,back_inserter未申明
}
//
代码来源于pfan.cn,但去掉不相干内容
class A
{
};
class B : private A
{
void foo()
{
A* p = 0;
}
};
class C : public B
{
void foo()
{
A* p = 0; // 此句报错
}
};
VC9言:error C2247: 'A' not accessible because 'B' uses 'private' to inherit
from 'A'
GCC4.5曰:error: 'class A A::A' is inaccessible
B中 A* p = 0 相当于
B::A* p = 0, 所以应当改为 ::A* p = 0,编译通过。
在B中,A是私有的,则在C中,A是不可以直接访问的,这是编译出错的原因。
// 代码来源于cppblog.com,但去掉不相干内容
struct A { virtual ~A(){}
};
struct B: A { virtual ~B(){} };
struct C
{
const A& GetB() const
{
return
b; // ①
}
const shared_ptr& GetBptr() const
{
return pb; // ②
}
const
double& GetInt() const
{
return c; // ③
}
B b;
shared_ptr pb;
int c;
};
VC9言:②warning C4172: returning address of local variable or
temporary
GCC4.5曰:②warning: returning reference to
temporary
shared_ptr并不是shared_ptr的基类,所以不可以公用同一块内存。为了说明问题,我特意加上了③,本质一样,所以它和②报同样的警告。