我正在阅读有关STL字符串类的内容。如下所述
STL字符串类选择不定义转换运算符,而是使用c_str()和data()方法直接访问内存。 STL故意不包括隐式转换运算符以防止滥用原始字符串指针。
我的问题是
谢谢!
答案 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.
在第一种情况下,很容易犯错误,没有 实现它,所以委员会决定不隐含 转换,这将是非法的。在第二种情况下, 你必须真的想要。