夜礼服 发表于 2016-1-1 16:56:57

c++primer第四版

第七页原文如下”输入操作符(>>操作符)行为与输出操作符相似。它接收一个istream对象作为其左操作数,接收一个对象作为其右操作数,它从istream操作数读取数据并保存到右操作数中。像输出操作符一样,输入操作符返回其左操作数作为结果。”
问题如下:>>的作用不就是读取并赋值吗?但最后一句为何说”返回左操作数作为结果”?返回是返回到哪?结果是作为什么的结果?

y290176346 发表于 2016-1-1 16:56:58

新手回答 仅供参考,这个操作符不是赋值操作符, 专业的词我也不会说,就是有点流向的意思 >>意思就是 吧屏幕输入的字符,流向>>操作符右边的变量!<<操作符的意思就是把左边的数据 流向到左边的左边,有点方向 的意思!
返回左操作数作为结果 我理解的意思就是: 把操作符左边的结果输送到(返回)右边,就是把左边的数据 给右边。

夜礼服 发表于 2016-1-2 11:07:48

可不可以解释一下iostream对象cin,cout的究竟含义(比如说与物理指针的联系)和操作符<<>>与函数的联系,以及在进行输入输出操作时键盘,显示器,cpu与内存,缓存间的交互作用进行深入的解释说明一下。。。。

y290176346 发表于 2016-1-2 12:03:20

你问的这个好像不是c++的知识我觉着要知道计算机原理才能回答上来, 我觉着你只要知道out 和cin 是操作输入输出的一个”功能“ 的对象就可以了 !甲鱼老师说 有时候可以不求甚解, 先把视频看看 看明白就可以了!有些问题等到你碰到了 需要这方便的知识 学完了也就明白了,c++ 只是一种让你操作计算机的语言,具体怎么实现要看别的书,你是需要给他下命令就可以了个人意见,不对指正!

夜礼服 发表于 2016-1-2 14:49:27

。。谢谢哦。。但如果想了解实现该读哪些具体的书呢?

y290176346 发表于 2016-1-2 15:44:26

我也不知道,不过你以后要像计算机的底层方向发展吗?如果像软件方面发展 这个没必要去深入研究!

ryxcaixia 发表于 2016-1-5 09:05:48

少年 仔细看书上的例子
因为std::cin可以返回 "输入操作符返回其左操作数作为结果"
换句话说 cin >> a, 返回的还是一个cin. 为什么这么做呢?
因为这单这样做就可以 把原本
std::cin >> v1
std::cin >> v2
这样的两个句子 整合成一个句子 std::cin >> v1 >> v2
因为(std::cin >> v1)之后不还是一个cin么

ryxcaixia 发表于 2016-1-5 09:06:59

本帖最后由 ryxcaixia 于 2016-1-5 09:09 编辑

所以书上才有一句总结的话
"由于输入操作符返回其左操作数(左操作数就是cin), 我们可以将输入请求序列合并成上述一条语句"

夜礼服 发表于 2016-1-5 10:02:41

突然有豁然开朗的感觉。。真是难得给力的回复。。但还是细节上不太明白,如果返回的是ci∩,那调用它的函数是不是>>呢?令外返回一个值,一个指针等形式可以理解但返回一个对象该怎样理解呢?

SXTDU 发表于 2016-1-10 11:21:36

往后看 运算符重载你就懂了{:10_279:}

夜礼服 发表于 2016-1-10 12:05:07

嗦咖

夜礼服 发表于 2016-1-10 14:53:32

好的。。谢谢*^_^*

错过会难过 发表于 2016-1-12 19:26:33

本帖最后由 错过会难过 于 2016-1-12 19:37 编辑

错过会难过 发表于 2016-1-12 19:37:58

其实istream类将>>运算符重载了,
而cin是istream类的一个对象,cout是ostream的一个对象
cin>>调用的就是istream类的一个成员函数:
istream& operator>>(int& nNum);
所以cin>>的返回值是istream&,
istream& 的意思就是istream类的对象的引用,
为什么要这样呢?
你看看cout的例子就知道了
如:
cout<<nNum1<<nNum2;
这看似一条语句,其实是两条语句:
cout <<nNum1;
cout<<nNum2 ;
据上所知,cout是ostream的一个对象,这个对象是全局的,你包含了<iostream>这个头文件时,你就又了cout这个变量。
所以cout最终调用的是一个ostream类的成员函数
成员函数的大概实现如下:
ostream& operator<<(int nNum)
{|
      printf("%d",nNum);
      return *this
}
这样就可以输出nNum1了,为什么要返回*this呢?
因为返回类型是ostream& , 那么*this是什么?
哪个对象调用了成员函数,谁就是this。
返回*this有什么用呢?
如果重载<<运算符返回的是一个整数,那么cout<<nNum1后面就无法使用<<nNum2了
因为这个整数不是类对象,它没有重载运算符,对于整数,<<是左移操作,而<<右边却不是整数,编译器只能报错。
但如过返回类型是cout的话,cout<<nNum1是一个函数,函数处理完了就会将cout返回,那么cout<<nNum2就可以
按cout<<nNum1一样的处理方法去处理了。
同理,cin>>nNum1>>nNum2也是一样的
istream& operarot>>(int& nNum)
{
      scanf("%d",&nNum);
      return *this;
}

counting_stars 发表于 2016-1-12 20:28:15

C++上用了重载操作符
返回的为cin,cout对象为什么这样做学到了C++类那里就知道为什么了
没学过的话解释太麻烦了
页: [1]
查看完整版本: c++primer第四版