我希望这个问题适用于stackoverflow ...将原始数据字节(8位)std::string存储在一个而不是存储在其中的区别是什么std::vector<char>.我正在读取文件中的二进制数据并将这些原始字节存储在a中std::string.这很有效,这样做没有任何问题或问题.我的程序按预期工作.但是,其他程序员更喜欢这种std::vector<char>方法并建议我停止使用,std::string因为它对原始字节不安全.所以我想知道为什么std::string用来保存原始数据字节会不安全?我知道std::string最常用于存储ASCII文本,但是一个字节是一个字节,所以我不明白它的偏好std::vector<char>.
谢谢你的建议!
J.N*_*.N. 13
问题不在于它是否有效或不成功.问题是,对于下一个阅读代码的人来说,这完全令人困惑.std::string用于显示文本.任何人都在阅读你的代码.你会用a表示你的意图更好std::vector<char>.
它会增加您在代码审查中的WTF/min.
在C++ 03中,std::string用于存储字节数据数组并不是一个好主意.按标准,std::string并没有必须存储数据连续.C++ 11修复了它,因此它的数据必须是连续的.
所以在C++ 03中这样做是行不通的.除非您亲自审查您的C++标准库实现,std::string以确保它是连续的.
无论哪种方式,我都会建议vector<char>.通常,当你看到string,你希望它是一个...字符串.你知道,某种形式的编码中的一系列字符.A vector<char>很明显它不是一个字符串,而是一个字节数组.