C++ 通过非cont c+修改std::string内部缓冲区+;17数据()过载

C++ 通过非cont c+修改std::string内部缓冲区+;17数据()过载,c++,c++17,stdstring,C++,C++17,Stdstring,我刚刚看到c++17重载了一个非常量data()方法,即CharT*data()noexcept并希望确保按如下方式调用它的行为得到了很好的定义: std::string str(some_size,'0'); memcpy((void*)str.data(),source,some_size); 是的,这个定义很明确。这是提供对原始数据的可变访问的预期目的。是的,这是定义明确的。这是提供对原始数据的可变访问的预期目的。哦,上帝不要(void*)str.data()——要么是noop cast

我刚刚看到c++17重载了一个非常量data()方法,即
CharT*data()noexcept
并希望确保按如下方式调用它的行为得到了很好的定义:

std::string str(some_size,'0');
memcpy((void*)str.data(),source,some_size);

是的,这个定义很明确。这是提供对原始数据的可变访问的预期目的。

是的,这是定义明确的。这是提供对原始数据的可变访问的预期目的。

哦,上帝不要
(void*)str.data()
——要么是noop cast,要么是疯狂的危险;它可以将整数转换为空指针,将常量指针转换为非常量指针。如果给它一个指向非常量的指针。。。真是太棒了。如果你想将你的强制类型转换标记为void,那么至少是静态强制类型转换(ptr)。哦,上帝不要
(void*)str.data()
——要么是noop强制类型转换,要么是非常危险的;它可以将整数转换为空指针,将常量指针转换为非常量指针。如果给它一个指向非常量的指针。。。真是太棒了。如果您想将强制转换标记为void以使其显而易见,至少应
静态强制转换(ptr)