例如我要重载>> (cin) 运算符,上面这句话到底应该怎么写?怎么用?
#include <iostream>
using namespace std;
istream& operator>>(istream& is,char*& x)
{return is;}
int main()
{
char* m = "aaaa";
cin >> "bbbb" >> m; //写入"bbbb"字符串到 m
}
以上这样写为什么行不通呢?????求大佬指点迷津!!!!!!
1
ysc3839 2019-06-23 19:50:19 +08:00 via Android
怎么个行不通呢?????求大佬说清楚具体什么错误!!!!!!
|
2
kljsandjb 2019-06-23 20:06:15 +08:00 via iPhone
|
3
lrxiao 2019-06-23 20:34:35 +08:00
1. array to pointer 是一个 rvalue
2. const char* 3. 这啥玩意,看起来就不太行 |
4
lrxiao 2019-06-23 20:36:23 +08:00
居然不用手机号...瞎打的就发出去了。不太行是指注释的这行看起来不能满足这个要求
|
5
lollipop43 2019-06-23 20:38:39 +08:00 1
运算符重载本质上还是一个函数,所以函数调用需要你传入数量类型匹配的实参。
你的重载函数形参有两个:istream&和 char*& 所以对应的调用就应该形如:cin >> m ; 再看你的写法:cin >> "bbb" >> m; 你的写法实际是两个函数调用,第一个:cin >> "bbb" 这里使用"bbb"就是行不通的,他需要一个变量的引用,"bbb"是一个常量,当然不可以。 第一函数调用返回了 istream&,所以可以链式调用,这是理论可行的,然而你第一个调用已经出错了,后面的自然无法进行,若是第一个调用能正常返回 istream&,按上述分析即可。 ==== 也没见过这么写的,一般都是为类方法重载,具体怎么使用看几个例子就明白了。 |
6
ipwx 2019-06-23 20:39:30 +08:00 2
1. 我也就不吐槽你写入数据到一段不知道多长的内存是多么危险的事情了。
2. 你是不是对 cin 的作用有所误解?它是从标准输入读入一段数据,而不是把一个变量复制到另一个变量。 3. 你的需求用:memcpy http://ideone.com/jpdXE9 |
7
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 是从流读而不是你的代码中的变量常量 |
8
shoujiaxin 2019-06-23 21:33:35 +08:00 via iPhone
你要重载的运算符是>>,cin 不是运算符,它是一个 istream 的对象。
|
9
no1xsyzy 2019-06-24 11:08:11 +08:00
istream& operator>>(istream& is,char*& x)
这个定义无法匹配到 cin >> "bbbb" 这一部分。 因为 "bbbb" 不是 char*& 类型的而是 const char* 类型的。 首先它是个 const,其次它不可变所以不能有 &。 —— 请明述需求。 |