9

首先我的理解是

cin >> std::noskipws >> str;

应该将整行从cin“我有空格”插入str. 但是,这只会将“i”放入str. 这可能是一个错误的假设,在这种情况下会std::noskipws做什么?

我知道有一个功能std::getline并且确实有效,但只是出于教育目的,我决定尝试std::noskipws为我工作。我过去曾尝试过,但它从来没有用过,所以我通常继续使用std::getline.

到目前为止,我认为我发现的是,std::noskipws从技术上讲,std::skipws它只是在内部取消了basic_iostream正义调用

ios_base::unsetf(std::ios::skipws); 

或者

ios_base::unsetf(ios_base::skipws);

所以我尝试继承我自己的流形式basic_iostream并手动设置这些标志(取消设置)。还是没有骰子。

那么,我是完全不在基地还是有办法让这项工作?

4

2 回答 2

13

std::noskipws 告诉 istream 在尝试读取类型时不要跳过任何前导空格。当没有前导空格时,标志没有影响。

于 2011-04-13T19:48:21.183 回答
3

std::skipws工作原理如下:std::istream始终保持当前读取位置。如果std::skipws设置,operator>>则调用 before 将当前读取位置推进到第一个非空格字符。

您看到的行为(在 之后的第一个空格处停止'i')是由operator>>for std::string(and std::wstring) 引起的。该操作员不考虑std::istream标志。另operator<<一种类型的 an 可能会做出其他决定,甚至跨空间继续。

于 2011-04-14T09:44:49.743 回答