我在程序中使用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 *供以后使用,则您将具有未定义的行为。如果对参数进行操作,但是需要在当前函数调用中进行操作,则您的代码是安全的。

09-10 04:24