相关疑难解决方法(0)

"&s [0]"是否指向std :: string中的连续字符?

我正在做一些维护工作,遇到类似以下的事情:

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++ stdstring memcpy c++03

37
推荐指数
3
解决办法
1万
查看次数

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(),但由于显而易见的原因,旧代码不使用它.)

c++ language-lawyer c++11 c++14 c++17

22
推荐指数
2
解决办法
3186
查看次数

标签 统计

c++ ×2

c++03 ×1

c++11 ×1

c++14 ×1

c++17 ×1

language-lawyer ×1

memcpy ×1

stdstring ×1