我想调用一个构造stringstream
对象的函数,如果满足某些条件,则使stringstream
对象失效。但我尝试这样做时,会收到使用已移动的对象的警告。如何在不切换到string
的情况下防止这种情况发生?
#include <iostream>
#include <sstream>
#include <functional>
using namespace std;
bool Condition(string) { return true; }
stringstream someFunc(function<bool(string&)> Condition) {
stringstream ssRes; // Warning C26800 Use of a moved from object:'ssRes'
ssRes << "here is a string";
string str = ssRes.str();
if (!Condition(str)) { ssRes.setstate(ios_base::failbit); }
return ssRes;
}
int main() {
stringstream ss = someFunc(Condition);
return 0;
}
...
。这样做只会让我们填写一些神奇地工作并且没有警告的代码,而你的真实代码无法编译。然后评论区就会充满“无法复制”的评论。所有编译器错误都可以使用实际编译的虚拟代码进行复制。例如,我们真的需要看到setstate
吗? - PaulMcKenziessRes
在函数结束之前没有被移动,所以没问题。 - NathanOliver