我正在做一些维护工作,遇到类似以下的事情:
std::string s;
s.resize( strLength );
// strLength is a size_t with the length of a C string in it.
memcpy( &s[0], str, strLength );
Run Code Online (Sandbox Code Playgroud)
我知道使用&s [0]如果它是std :: vector会是安全的,但是这是std :: string的安全使用吗?
我知道在C++ 98中,既不需要std::basic_string<>也不std::vector<>需要使用连续存储.std::vector<>一旦被指出,这被视为疏忽,如果我没记错的话,用C++ 03修复.
我似乎记得std::basic_string<>在C++ 11仍然被称为C++ 0x时读过有关需要使用连续存储的讨论,但我当时没有密切关注讨论,并且仍然局限于C++ 03的工作所以我不确定它是什么.
那么是否std::basic_string<>需要使用连续存储?(如果是这样,那么标准的哪个版本首先需要它?)
如果您想知道:如果您将代码传递&str[0]给期望连续写入内存的函数,则这很重要.(我知道str.data(),但由于显而易见的原因,旧代码不使用它.)