我有一种情况,我正在对一些项目执行二进制序列化,并将它们写入不透明的字节缓冲区:
int SerializeToBuffer(unsigned char* buffer)
{
stringstream ss;
vector<Serializable> items = GetSerializables();
string serializedItem("");
short len = 0;
for(int i = 0; i < items.size(); ++i)
{
serializedItem = items[i].Serialize();
len = serializedItem.length();
// Write the bytes to the stream
ss.write(*(char*)&(len), 2);
ss.write(serializedItem.c_str(), len);
}
buffer = reinterpret_cast<unsigned char*>(
const_cast<char*>(ss.str().c_str()));
return items.size();
}
从 ss.str().c_str()
中移除 const
是否安全,然后将结果 reinterpret_cast
为unsigned char*
然后把它赋给缓冲区?
注意:代码只是为了让您了解我在做什么,不一定可以编译。
最佳答案
不删除固有常量字符串的常量性将导致未定义的行为。
const char* c_str ( ) const;
获取等效的 C 字符串
生成与字符串对象具有相同内容的以 null 结尾的字符序列(c 字符串),并将其作为指向字符数组的指针返回。
自动附加终止空字符。
返回的数组指向一个内部位置,该位置具有此字符序列及其终止空字符所需的存储空间,但不应在程序中修改此数组中的值,并且只保证在下一次调用字符串对象的非常量成员函数。
关于c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031564/