关于标准库vector的使用

在标准库容器vector中,这样是正确的:
vectorvc;
vector::iterator iter;
iter=vc.begin();
iter++;//此时正确
但是下面这样是错误的:
vectorvc;
vc.begin()++//此时错误

为什么不能直接vc.begin()++呢?

vc.begin()++被编译成
vc.begin() = vc.begin() + 1;
或者说
vector::iterator iter;
iter = vc.begin();
iter = vc.begin() + 1;
那么事实上vc.begin()被调用了两次。

这里iterator的++是重载操作符,不是一般的变量的自增量。类似下面这样,

const_noconst_iterator operator++(int){
// Use operator++()
const const_noconst_iterator old(*this);
++(*this);
return old;
}