考虑到以下几点:

char c;
cin >> c;
cin.unget();

假设字符输入成功,unget 是否保证至少能够备份那个字符?如果我请求并成功获得一个字符串,是否可以保证允许我一直调用 unget 到该字符串的开头?

最佳答案

你保证能够 unget 至少 1 个字符。多于一个取决于实现和情况,所以你不应该假设你可以 unget 多于一个。

编辑: 对不起,我在想 libc 的 int unget(int ch, FILE *stream) 。其中标准说:



我会看看我是否能找到关于 basic_istream<>& unget() 的确切内容

编辑: 好的,下面是 C++ 标准对 basic_istream<>& unget() 的描述(我添加了粗体):



所以重要的是它调用 sungetc() ,让我们看看标准是怎么说的:



我看不到任何明确说明限制的内容,因此值得一试。如果我理解正确,它将调整后备流缓冲区中的指针。所以只要缓冲区中有足够的“历史”,它就应该继续成功。

然而,与 C 不同的是,您似乎永远无法保证它会起作用,但您可能能够回退多个字符。

所以我的建议是不要依赖于放回多个字符,并始终检查是否失败。

关于c++ - unget有什么保证吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6152956/

10-13 01:06