字符串类没有转换运算符

时间:2013-07-22 14:13:18

标签: c++ stl

我正在阅读有关STL字符串类的内容。如下所述

STL字符串类选择不定义转换运算符,而是使用c_str()和data()方法直接访问内存。 STL故意不包括隐式转换运算符以防止滥用原始字符串指针。

我的问题是

  1. c_str()返回const char *指针,仍然可以修改字符串值。我是对的吗?
  2. 作者的意思是“防止滥用原始字符串指针”?请解释一下,最好举个例子。
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

不,您不能使用std::string::c_str()的返回值 修改字符串。尝试这样做是未定义的行为。和 问题是(现在仍然是)指针的生命周期 由std::string::c_str()返回。如果是,则变为无效 string被破坏,或者是否有任何非const函数被调用 字符串。问题包括:

char const* s = string1 + string2;
//  s is invalid here.

VS

char const* s = (string1 + string2).c_str();
//  s is invalid here.

在第一种情况下,很容易犯错误,没有 实现它,所以委员会决定不隐含 转换,这将是非法的。在第二种情况下, 你必须真的想要。