cin >> ws vs cin.ignore(numeric_limits<streamsize>::max(), '\n')?

cin >> ws vs cin.ignore(numeric_limits<streamsize>::max(), '\n')?

从阅读 https://en.cppreference.com/w/cpp/io/manip/ws 来看,cin >> ws 似乎完成了 cin.ignore(numeric_limits<streamsize>::max(), '\n') 的意图(丢弃前导空格和换行符)。

还有什么我没有考虑到的区别吗?我很好奇为什么 cin >> ws 不像更复杂的 cin.ignore(numeric_limits<streamsize>::max(), '\n') 那样更常用或更受欢迎,后者也需要 #include <limits>

我发现问这个问题的唯一其他问题是: cin, getline, leading whitespace: ignore vs ws 并没有引起太多关注。

首先,ignore丢弃所有个字符直到分隔符,不仅是white-space.

其次,ignore 丢弃直到指定的分隔符,它可以是任何字符(不仅是换行符),而 ws 忽略前导 space,直到有任何 非space字符。

第三,换行符 '\n' 是一个白色 space 字符,因此会被 ws 操纵器丢弃。