我试图让一些最初用 Microsoft Visual Studio (VS) 2003 编写的 C++ 代码在 VS 2008 下编译,但我无法找到一个有效的解决方案来将 vector::iterator 分配给 char 数组的开头。我知道迭代器从定义为简单指针类型 (T*) 到 VS 2003 和 VS 2005 之间的类类型。这是我正在谈论的一个简单示例:
typedef std::vector<char> CharContainer;
typedef CharContainer::iterator InputIt;
int FindNumMsgs( InputIt _inputIter, int _len );
int ProcessBufferForMsgs( char buf[], const size_t maxlen )
{
int numMsgs = FindNumMsgs( InputIt(buf), maxlen );
...
}
因此,在 VS 2003 中,它可以毫无问题地编译和工作(因为迭代器被定义为 T*)。在 VS 2008 中,C2440(函数样式转换)出现此错误,因为我不能再仅使用 buf 指针分配迭代器。既然迭代器是类类型,我该怎么做才能让它在 VS 2008 中工作?我可以将缓冲区复制到一个向量中,然后传入 myVec.begin(),但我必须认为我可以避免这种开销。