0

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

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

我的问题是

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

谢谢!

4

1 回答 1

2

不,您不能使用的返回值std::string::c_str()来修改字符串。试图这样做是未定义的行为。问题是(现在仍然是)返回的指针的生命周期std::string::c_str()。如果字符串被破坏,或者在字符串上调用了任何非常量函数,则它变得无效。这些问题是这样的:

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

对比

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

在第一种情况下,很容易在不知不觉中犯错,因此委员会决定不进行隐式转换,这样就违法了。在第二种情况下,你必须真的想要。

于 2013-07-22T14:20:31.187 回答