std::string 的数据内存是否连续?
对于std::vector来说,我们知道,内部存储的数据内存空间是连续的,因此代码如下是正确的:
std::vector<char> vtContent(MAX_NUMBER,0);
...
ReadFile(hFile,&vtContent[0],MAX_NUMBER,&dwRead);
那对于std::string来说,这样是否正确呢?
std::string stContent(MAX_NUMBER,0);
...
ReadFile(hFile,&stContent[0],MAX_NUMBER,&dwRead);
在C++编程规范中提到,std::string类型的存储内存是否连续需要根据不同的stl实现来定,但我觉得这个有点牵强。
我先说说自己的理由,
std::string可以用[]来获取数据,这个是C++标准规定的;如果用[]可以,那么应该也可以使用指针形式:
比如,char ch = stContent[5],
我们可以用指针:
char *pCont = reinterpret_cast<char *>(&stContent[0]);
char ch = *(pCont + 5);
如果可以用指针步进的话,那么内存应该是连续的才对。
当然,这个例子也有漏洞,如果说std::string内存不是连续也说得过去:
首先是std::string已经重载了[]操作符,用[]获取数据并不是根据内存连续来进行。指针可以用来指向数据,应该是不行的,例子的漏洞可能发生在转换中:reinterpret_cast<char *>。
想不明白,望大家指教~