无法理解 为何参数不是临时变量会有这种报错?
c++吧
全部回复
仅看楼主
level 5
贴吧用户_07Nta1W
楼主
虽然搜了一圈都说函数那里加个const就可以
但是没有用过临时变量,按理一开始就不可能发生这种错误啊?如果加了个const我也不敢肯定这样写出来的程序就对了,因为总感觉没搞清楚问题根源是什么
2018年01月16日 23点01分
1
level 5
贴吧用户_07Nta1W
楼主
自己又观察了一下
发现所有出错的地方其实和右值没关系
而是引用的参数的类型是参数的子类……
但是为什么是报这里的错误呢,按理应该能引用子类才对?
2018年01月17日 00点01分
2
贴吧用户_07Nta1W
我明白了 这里看上去参数是左值,但是因为参数实际上是引用的指针的子类,其实这里编译器实现的时候是产生了一个临时的转换运算。不知道这里如果加const能不能达到想要的效果。
2018年01月17日 00点01分
level 11
M_P_C_King
首先你试没试过加const?然后你这个myAST的定义也不给出来。
问题的根源就是报错的内容,只不过你大概不知道什么叫rvalue,它显然不等价于“临时变量”
2018年01月17日 00点01分
3
贴吧用户_07Nta1W
大概内容在楼下。我估计是因为编译器实现的时候,对于派生类传参进基类是直接用一个转换函数实现的?
2018年01月17日 00点01分
贴吧用户_07Nta1W
加const的意义是限制这里临时变量的修改,但是我的目的是修改变量,加了const是和原目的相悖了吧?所以我没加
2018年01月17日 00点01分
level 5
贴吧用户_07Nta1W
楼主
好吧,问题来了
token类型是AST类的派生类。
原来的函数是很简单的,两个参数都是基类AST类型的指针,并且会在函数中指针会进行修改。
(这个函数刚好可以把&去掉,但是出错的这系列函数中有几个是明确需要修改指针内容的,也就是说虽然这个函数可以通过去掉参数里的&解决但还是会有别的函数有这个问题)
上面出错的原因大概分析了一下,是因为传参的时候用了派生类传参,然后我估计编译器在这里实现的时候实际上是用了一个类型转换函数,把派生类转成基类传递进去的,这样的话输入的左值就变成右值了,就触发了那个不允许在临时变量前面加&的报错。
那么,如果我仍想直接实现用派生类的指针作为参数传入基类指针为参数的函数,并且能够用&来改变其指针值,该如何实现?
2018年01月17日 00点01分
4
level 11
M_P_C_King
语法钦定了,这个设计是不可以的。
为何实参最初不是AST*?(通常来说,树节点的父子指针应该都是基类型)
如果实参可以确定为某个派生类,那么为什么形参是AST*?各派生类用同一套逻辑的话,考虑模板。
2018年01月17日 02点01分
5
level 1
资源站A1234
编程自学教✅程,高清画质✚系统详解,自己保存哦
http://pAn.baIdu.COM/s/1bqwz9Hd
2018年01月17日 02点01分
6
1