First off my understanding is that
cin >> std::noskipws >> str;
should stick a whole line from cin
like \"i have s
std::noskipws tells the istream to not skip any leading white space when attempting to read a type. When there is no leading white space, then the flag has no impact.
std::skipws
works as follows: std::istream
always keeps a current read position. If std::skipws
is set, before operator>>
is called the current read position is advanced to the first non-space character.
The behavior you're seeing (stop at the first space after 'i'
) is caused by operator>>
for std::string
(and std::wstring
). That operator doesn't take the std::istream
flags into account. An operator<<
for another type may decide otherwise and continue even across spaces.