在应用逻辑中,为了管理方便,偷懒的程序员们喜欢用vector来管理一块动态数组,传到底层buffer时,模块常常要求提供一块char*或char[]的缓冲区,可以通过vector的begin方法返回数组首指针地址传入子程序来解决,这里涉及到一个iterator强制转换成类型指针的问题。
在vc6中,这一步是被编译器允许的,可以通过隐式转换来完成,也就是说,不需要做额外的工作。
代码如下:
std::vector<char> buffer_list;
send(socket,buffer_list.begin(),buffer_list.size(),0);
vc8中vector的begin方法返回的iterator不能直接转换成指针用,vc6的工程转换到vc8以后出现此类问题的概率较高,笔者在编译一个开源库的过程中被此问题困扰许久,尝试用下面代码解决问题:
std::vector<char> buffer_list;
send(socket,(char*)&(*buffer_list.begin()),buffer_list.size(),0);


分享到做啥
分享到收客
