以这种方式在 C++ 中操作字符串是否可以:
string s = "Sting";
s[2] = 'a';
它工作正常(并打印“Sting”),但这样做安全吗?
如果是,这是否意味着它们是可变的?
原文由 abcde 发布,翻译遵循 CC BY-SA 4.0 许可协议
以这种方式在 C++ 中操作字符串是否可以:
string s = "Sting";
s[2] = 'a';
它工作正常(并打印“Sting”),但这样做安全吗?
如果是,这是否意味着它们是可变的?
原文由 abcde 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答2.7k 阅读✓ 已解决
C++ 字符串文字,即
"literal"
是不可变的,尽管 C++03 允许将指向此类文字的指针分配给char*
(此权限已被 C++ 弃用并删除11)。尝试更改字符串文字的字符是未定义的行为:C++
std::string
对象当然是可变的,假设它们没有被声明为std::string const
。如果您认为char
对象的序列彼此独立,则可以分配给各个对象。然而,字符串实际上包含编码为 UTF-8 字节的 Unicode 是很常见的。如果是这种情况,更改字符串的任何元素都可能会破坏正确的编码,例如,因为连续字节被其他内容替换。所以,是的,字符串是可变的,但从语义的角度来看,分配给单个元素可能并不安全。