请帮我看看,这个语句表达的意思是什么

while(cin>>index0>>str>>index1)
我有点不理解,希望帮帮忙,谢谢

c++

6个回答

为了分析简便以下内容假设index0、index1类型为int;str为string对象.

这段代码涉及到两个运算符重载:
第一个:重载移位运算符

//版本1:从输入流读取整形数据
istream& operator>> (istream &, int &);
//版本2:从输入流读取string对象
istream& operator>> (istream &, string &);

从以上重载函数的原型可以看出while语句中的条件实际与下列函数调用等价

 operator>> (operator>>(operator>> (std::cin, index0), str), index1);

  std::cin是一个istream对象,以上代码的含义是:
   step1:以std::cin和index0为实参调用operator>> ()函数的版本1,返回值为istream对象;
   step2:用setp1中返回的istream对象和str为实参调用operator>> ()函数的版本2,返回值为istream对象;
   step3:用setp2中返回的istream对象和str为实参调用operator>> ()函数的版本2,返回值为istream对象;

  显然step3函数调用的返回值就是cin >> index0 >> str >> index1;这条语句的返回值。从函数原型来看,step3中调用函数的返回值类型为istream&,而while语句的判断条件接受一个bool型的表达式,这里能够编译成功并正确运行必然存在从isteam类型到bool类型的转换。
  这种转化是如何实现的呢?这就涉及到第二个运算符重载了:
istream类有如下成员函数

//类型转换运算符的返回类型是确定的,无法指定返回类型,但它有返回值。
operator bool();

如上istream类实现了bool()类型转换运算符的重载,那么在while语句中,根据需求编译器自动调用此函数完成从istream对象到bool型的转换。

  现在,只剩下一个问题了!
  当发生转化时,一个istream对象什么时候被转化成true?什么时候被转化成false呢?
从使用流对象的角度来看,一般来说出现错误时,如类型不匹配以及读取到文件尾时结果为false。

将cin的返回值作为bool值来处理;如果index0、str、index1都有正确输入则执行while循环,否则退出while循环。

while(cin>>index0>>str>>index1)
分解一下
int a = cin>>index0;
int b = a>>str;
int c = b>>index1;
while(c)

我这是java风格的,请注意

我们不应该问cin返回值是什么,我觉得我们应该关注">>"输入操作符,其实是它到底返回了什么。因为cin是标准输入istream的一个对象,一个对象能返回什么吗?对象有返回值吗?好像没有吧!在C++primer里面讲到过,cin>>x>>y。有这么一行代码,我们讨论下">>"这个输入操作符,这个操作符接收一个istream对象作为其做操作数,接收一个对象作为其右操作数。">>"操作符返回其左操作数作为结果,这样也就可以解释为什么上面可以将两个输入操作合并了。因为cin>>x返回cin对象,接着又可以进行cin>>y。所以我们就可以顺利进行输入了。

简单来讲就是连续输入三个变量,变量类型分别是index(),str,index1对应的类型,如果输入合法并成功读取则进行while循环

当发生转化时,一个istream对象什么时候被转化成true?什么时候被转化成false呢?从使用流对象的角度来看,一般来说出现错误时,如类型不匹配以及读取到文件尾时结果为false。将cin的返回值作为bool值来处理;如果index0、str、index1都有正确输入则执行while循环,否则退出while循环。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问