我在程序中使用stringstream
类型变量。
以下是代码段:
stringstream keyvalueStream;
keyvalueStream << // appending some string
somefun(keyvalueStream.str().c_str()); // Passing the char*
keyvalueStream.str(std::string()); // clearing the content of this variable.
清除
keyvalueStream
的内容是否会影响我将在somefun()
中获得的字符串? 最佳答案
问题的答案取决于somefun
对传递给它的char const *
的处理方式,而不取决于您是否清除了stringstream
的内容。stringstream::str
按值返回std::string
对象,因此以后是否清除stringstream
内容无关紧要。
在表达中
somefun(keyvalueStream.str().c_str());
返回对
string
的调用时,返回的somefun
对象将被销毁。因此,如果somefun
以某种方式存储char const *
供以后使用,则您将具有未定义的行为。如果对参数进行操作,但是需要在当前函数调用中进行操作,则您的代码是安全的。