为何while (cin<<s) 能循环读入string对象?

string s;
cin >> s;
cout << s ;

            输入 “hello world”

            输出 hello

            为何 whlie (cin >> s) {
            .    cout << s << endl

            能输出 hello
            。        world
            呢?

            不是空格后都清空了吗?

第一次读取的是hello,第二次读取的是world
如果你输入hello world

whlie (cin >> s) {
cout << s << endl;
}
相当于
cin >> s;
cout << s << endl;
cin >> s;
cout << s << endl;
(此后因为你输入的是2个单词,后面没有了,第二次循环后,cin返回0,于是就不再继续)

while()括号里面为bool值,当为0(false)才停止循环,你可以用while(cin>>s)持续输入,是因为cin>>s也有返回值,且这个返回值转化为bool值不为0

while()括号里的应该是一个bool类型的值,在cin>>s的输入流下,如果string类的对象s中包含了空格,便会循环读取s。例如我的s是I am a boy
如果把它放进栈里的话,里面的值依次就是I ,am,a,boy。