istream& operator>>(istream& is,XXX& x) 到底怎么用??

2019-06-23 18:42:04 +08:00
 b00tyhunt3r

例如我要重载>> (cin) 运算符,上面这句话到底应该怎么写?怎么用?

#include <iostream>
using namespace std;

istream& operator>>(istream& is,char*& x)            
{return is;}                                         

int main()
{
  char* m = "aaaa";
  cin >> "bbbb" >> m;  //写入"bbbb"字符串到 m
}

以上这样写为什么行不通呢?????求大佬指点迷津!!!!!!

2711 次点击
所在节点    C
9 条回复
ysc3839
2019-06-23 19:50:19 +08:00
怎么个行不通呢?????求大佬说清楚具体什么错误!!!!!!
kljsandjb
2019-06-23 20:06:15 +08:00
lrxiao
2019-06-23 20:34:35 +08:00
1. array to pointer 是一个 rvalue
2. const char*
3. 这啥玩意,看起来就不太行
lrxiao
2019-06-23 20:36:23 +08:00
居然不用手机号...瞎打的就发出去了。不太行是指注释的这行看起来不能满足这个要求
lollipop43
2019-06-23 20:38:39 +08:00
运算符重载本质上还是一个函数,所以函数调用需要你传入数量类型匹配的实参。
你的重载函数形参有两个:istream&和 char*&
所以对应的调用就应该形如:cin >> m ;
再看你的写法:cin >> "bbb" >> m;
你的写法实际是两个函数调用,第一个:cin >> "bbb"
这里使用"bbb"就是行不通的,他需要一个变量的引用,"bbb"是一个常量,当然不可以。
第一函数调用返回了 istream&,所以可以链式调用,这是理论可行的,然而你第一个调用已经出错了,后面的自然无法进行,若是第一个调用能正常返回 istream&,按上述分析即可。
====
也没见过这么写的,一般都是为类方法重载,具体怎么使用看几个例子就明白了。
ipwx
2019-06-23 20:39:30 +08:00
1. 我也就不吐槽你写入数据到一段不知道多长的内存是多么危险的事情了。
2. 你是不是对 cin 的作用有所误解?它是从标准输入读入一段数据,而不是把一个变量复制到另一个变量。
3. 你的需求用:memcpy

http://ideone.com/jpdXE9
SingeeKing
2019-06-23 21:22:06 +08:00
那个是重载,需要在类里 cin >> "bbbb" 一定错误因为 "bbbb" 不是你自己的类而是 char* 数组,你需要自己做一个类,比如

class YY() {
constructor(char* xx) {....}
istream& operator>>(istream& is,XXX& x){...; return isl}
}

cin >> YY("xxx") ;

写入"bbbb"字符串到 m 更不是这么用的,cin 是从流读而不是你的代码中的变量常量
shoujiaxin
2019-06-23 21:33:35 +08:00
你要重载的运算符是>>,cin 不是运算符,它是一个 istream 的对象。
no1xsyzy
2019-06-24 11:08:11 +08:00
istream& operator>>(istream& is,char*& x)
这个定义无法匹配到 cin >> "bbbb" 这一部分。
因为 "bbbb" 不是 char*& 类型的而是 const char* 类型的。
首先它是个 const,其次它不可变所以不能有 &。
——
请明述需求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576675

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX