左值 istringstream 需要istream_iterator
Lvalue istringstream Required for istream_iterator?
给定Visual Studio中的string foo
,我可以通过执行以下操作将这些单词分解为vector
:
vector fooVec{ istream_iterator<string>(istringstream(foo)), istream_iterator<string>() };
但这不会在 gcc 5.1 中编译。我收到错误:
从类型
std::basic_istream<char>
的右值初始化类型std::istream_iterator<std::basic_string<char> >::istream_type&
{akastd::basic_istream<char>&
} 的非常量引用无效
现在我知道 gcc 有一个错误,由我们自己的 Jonathan Wakely 修复。这是该错误的扩展,还是我在这里使用 Rvalue istringstream
是否违法?
这不是一个 gcc 错误,而是一个邪恶的 MSVC 扩展。 std::istream_iterator::istream_iteraor()
需要左值引用。 由于istringstream(foo)
是一个临时的 gcc,因此您不能将临时绑定到左值引用。
这在 MSVC 上工作的原因是前面提到的扩展允许临时绑定到左值引用。 这允许不符合标准的代码在 MSVC 上工作。
所以要回答
这是该错误的扩展,还是我在这里使用 Rvalue
istringstream
是否非法?
不,这不是错误,您需要在此处使用非临时流来构建istream_iterator
。
相关文章:
- 为什么istream不支持右值提取
- 将无符号char*转换为std::istream*C++
- 需要从 istream 和 ostream 派生 iostream
- 使用std::istream::peek()总是安全的吗
- 使用 istream 参数读取的 istream 函数
- istream std::cin如何修改自定义istream缓冲区
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 在清除 istream 之前,我不应该需要取消获取它吗?
- C++,如何根据运行时条件构造引用不同 istream 对象的对象?
- 如何将QByteArray转换为std::istream或std::ifstream?
- 逗号在重载 ostream 和 istream 在结构中分开
- 为什么unordered_set<string::iterator>不起作用?
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- 从函数返回 istream 的正确方法
- 阅读从 istream 到矢量的不同类型列表
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- 关于 istream 中的错误处理的问题
- Visual accept std::string from std::byte iterator