c++ - C++ 字符串与 Java 字符串不同吗?

标签 c++ string

这样在C++中操作字符串可以吗:

string s = "Sting";
s[2] = 'a';

它工作正常(并打印“Sting”),但这样做安全吗?

如果是,这是否意味着它们是可变的?

最佳答案

C++ 字符串文字,即像 "literal" 之类的东西是不可变的,尽管 C++03 允许将指向此类文字的指针分配给 char*(此特权对于 C++11 已弃用并删除)。尝试更改字符串文字的字符是未定义的行为:

char* s = "literal"; // OK with C++03; illegal with C++11 and later
s[0] = 'x';          // undefined behavior

C++ std::string 对象当然是可变的,假设它们没有被声明为 std::string const。如果您认为 char 对象的序列彼此独立,则可以分配给各个对象。然而,字符串实际上包含编码为 UTF-8 字节的 Unicode 是很常见的。如果是这种情况,更改字符串的任何元素都可能破坏正确的编码,例如,因为连续字节被其他内容替换。

所以,是的,字符串是可变的,但从语义的角度来看,分配给单个元素可能不安全。

关于c++ - C++ 字符串与 Java 字符串不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28442719/

相关文章:

c++ - avformat_open_input 导致 RTP 流打开异常

c - 编程查找元音,If 语句未分配正确的值

c++ - Qt和VS C++ dll函数返回值

c++ - 在将字符串转换为 ptime 时使用 %f 标志 boost ptime input_facet 错误

C++11 枚举转发导致 "underlying type mismatch"

c++ - 使用 vector 的 vector 在 opengl 中绘制地面

c++ - 如何将我的程序添加到 macOS 文件和文件夹右键菜单?

c - 需要帮助在 C 中创建并行数组

Java:如何用分隔符值替换字符串中的空格和\r?

php - 删除最后一个逗号或阻止它在所有 MySQL/PHP 中打印