我正在阅读有关 STL 字符串类的信息。如下所述
STL 字符串类选择不定义转换运算符,而是使用 c_str() 和 data() 方法直接访问内存。STL 故意不包括隐式转换运算符以防止滥用原始字符串指针。
我的问题是
- c_str() 返回 const char* 指针,用户仍然可以修改字符串值。我对吗?
- 作者所说的“防止滥用原始字符串指针”是什么意思?请解释一下,最好举个例子。
谢谢!
不,您不能使用的返回值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.
在第一种情况下,很容易在不知不觉中犯错,因此委员会决定不进行隐式转换,这样就违法了。在第二种情况下,你必须真的想要。