我一直在使用以下代码来清除 std::stringstream
:
m.swap(std::stringstream());
这段代码可能来自这个SO帖子。最近我在Visual Studio 2013中编译我的代码时,收到了以下警告:
warning C4239: nonstandard extension used : 'argument' : conversion from 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>' to 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>> &'
1> A non-const reference may only be bound to an lvalue
在较早的Visual Studio版本中使用/W4时我没有收到任何警告。我记得在较早的版本中,我有时无法可靠地清除stringstreams,这就是我最初使用那段代码的原因。
那么,用这种方式清除stringstream是否具有可移植性?如果不是,你能解释一下为什么吗?还有没有一种可移植的方法来清除stringstream?谢谢
编辑:这是所请求的代码。请使用/W4
编译以查看警告。
int _tmain(int argc, _TCHAR* argv[])
{
std::stringstream m;
m.swap(std::stringstream());
return 0;
}