我的代码遇到了一些问题,因为它输出了两个不同的结果。
代码:
void output(int x){
for( int i = 0; i <=x; i++){
std::ostringstream ss;
std::string result;
ss << std::setw(5) << std::left << "Hi" << ' ' << "There " << i << "\n";
std::vector<char> s(result.c_str(), result.c_str() + result.size() + 1u);
result +=ss.str();
std::cout << result;
}
}
输出
你好0
你好1
你好2
你好3
这是正确的,如: output(3); ,但是当我试图在类中定义它们并使用它时
事情里面的东西开始变得非常奇怪。我现在使用的代码是:class myclass{
public:
std::ostringstream ss;
std::string result;
}v;
void output(int x){
for( int i = 0; i <=x; i++){
v.ss << std::setw(5) << std::left << "Hi" << ' ' << "There " << i << "\n";
std::vector<char> s(v.result.c_str(), v.result.c_str() + v.result.size() + 1u);
v.result +=v.ss.str();
std::cout << v.result;
}
}
输出:
你好0
你好0
你好0
你好1
你好0
你好0
你好1
你好0
你好1
你好2
你好0
你好0
你好1
你好0
你好1
你好2
你好0
你好1
你好2
你好3
这是错误的,我怎样才能在类中定义它们并获得与第一个示例中相同的输出?
请帮帮我。
答案 0 :(得分:2)
在第一个示例中,您的字符串流是循环的本地。这意味着它会在每次迭代时被破坏并再次创建。
然而,在第二个例子中,这不会发生,因为流属于类对象v。只要v
存在,它就会存在。这意味着它将在每次迭代中保存所有内容。
要获得相同的结果,请执行此操作
v.result +=v.ss.str();
std::cout << v.result;
v.ss.str(""); // This will clear the string stream of v.
v.result = ""; // This will clear the string of v.
但是我不确定你想要实现的目标,因为这样做看起来有点无意义。
答案 1 :(得分:1)
在函数内部,每次都会得到一个新的空字符串和stringstream。当存储在类中时,它们被重用并累积输出。
没有什么可以阻止你在成员函数中使用局部变量,并获得与自由函数中相同的功能。