我在尝试将 getline()
与临时流对象一起使用时遇到了意外的编译错误:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string input = "hello\nworld\nof\ndelimiters";
string line;
if (getline(stringstream(input), line)) // ERROR!
{
cout << line << endl;
}
}
看起来不存在接受对流对象的右值引用的 getline()
重载。如果我将 main()
更改为使用左值,它会按预期编译和运行:
int main()
{
string input = "hello\nworld\nof\ndelimiters";
string line;
stringstream ss(inpupt);
if (getline(ss, line)) // OK
{
cout << line << endl;
}
}
所以我查看了 C++11 标准并发现 (§ 21.4.8.9) getline()
的重载采用对流对象的右值引用 应该存在。
我是否遗漏了一些明显的东西,或者这是一个错误? GCC 4.7.2 和 Clang 3.2 都会出现该错误。我目前无法在 VC 上测试它。
最佳答案
如果我在 OS X 上使用以下行进行编译,则编译成功。您使用的是什么版本的 libstdc++ 或 libc++?
clang++ -std=c++11 -stdlib=libc++ foo.cc
libstdc++(以及与此相关的 libc++)尚未完全实现 C++ 2011 标准库。这似乎是 libstdc++ 中缺少的功能之一。
遗憾的是,我不知道有任何资源可以准确列出每个实现中缺少的内容。
关于c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265883/