【发布时间】:2014-05-17 21:12:07
【问题描述】:
我一直在用下面的代码清除std::stringstream:
m.swap(std::stringstream());
代码可能取自this SO thread。最近我在 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
在使用 /W4 的早期版本的 Visual Studio 中,我没有收到任何警告。我记得我在早期版本中无法可靠地清除字符串流,这就是我最终使用该代码的原因。
那么以这种方式清除字符串流是否可移植,如果不能,您能解释一下为什么不这样做吗?还有一种清除字符串流的便携式方法吗?谢谢
编辑:这是请求的代码。使用/W4 编译它以查看警告。
int _tmain(int argc, _TCHAR* argv[])
{
std::stringstream m;
m.swap(std::stringstream());
return 0;
}
【问题讨论】:
-
我无法重现它,你能发布一些代码吗?
-
@Manu343726 放松,伙计。
-
在我的 VS++2013 中编译正常。
-
@Manu343726 因为没有其他编译器具有非标准扩展。哦,等等,他们都这样做。 (不可否认,这个特定的扩展确实很糟糕)
-
我在 VS2013 中做了一个控制台应用程序,我运行你发布的代码没有优化,我无法重现。它编译良好,没有警告。
标签: c++ visual-studio-2013 stringstream