c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?

标签 c++ serialization constants const-correctness binary-serialization

我有一种情况,我正在对一些项目执行二进制序列化,并将它们写入不透明的字节缓冲区:

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_castunsigned char* 然后把它赋给缓冲区?

注意:代码只是为了让您了解我在做什么,不一定可以编译。

最佳答案

不删除固有常量字符串的常量性将导致未定义的行为

const char* c_str ( ) const;
获取等效的 C 字符串

生成与字符串对象具有相同内容的以 null 结尾的字符序列(c 字符串),并将其作为指向字符数组的指针返回。
自动附加终止空字符。
返回的数组指向一个内部位置,该位置具有此字符序列及其终止空字符所需的存储空间,但不应在程序中修改此数组中的值,并且只保证在下一次调用字符串对象的非常量成员函数。

关于c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031564/

相关文章:

java - GWT 中的 NotSerializedException (ByteArrayOutputStream)

c - 传递常量矩阵

c++ - 错误 : Expected a ')' ?

c++ - 在 8 位 block 中使用变量的好方法是什么?

c++ - 从 2D 点阵列创建图像

php - 如何在 MySQL 中更新序列化数据

c# - [DataMember] 如何与 Image 一起使用?

c++ - 这段代码中 const "at()"和非常量 at()"的目的是什么?

c++ - 以毫秒为单位捕获时间

C++使用宏定义单个类的类成员