我的代码有问题。
有以下功能:
static Poly PolyFromCoeff(int coeff);
static Mono MonoFromPoly(const Poly *p, int exp);
在另一个函数中,我有这一行:
Mono m = MonoFromPoly(&PolyFromCoeff(10),4);
但我收到此错误消息:
左值作为一元'&'操作数
如果我将第一个结果保存到变量,则没有错误:
Poly p = PolyFromCoeff(10);
Mono m = MonoFromPoly(&p,4);
为什么第一个解决方案错了?
答案 0 :(得分:2)
正如它所说,运算符&
需要左值作为其参数,即它不能应用于临时值。地址不与值相关联,仅与对象关联。
在第二种形式中,您实例化一个包含该值的对象,您可以轻松获取该对象的地址。
答案 1 :(得分:1)
C语言明确禁止您获取 rvalue 的地址(这是函数返回的内容)。 C11 standard (committee draft)中的这一条款对其进行了总结:
6.5.3.2地址和间接运营商
<强>约束强>
- 一元
醇>&
运算符的操作数应该是函数指示符,是a的结果[]
或一元*
运算符,或指定不是位字段的对象的左值 未使用寄存器存储类说明符声明。
如果您对 lvalue 和 rvalue 感到困惑,请将其想象如下:
如果你有C ++背景,你可能会感到困惑,因为引用的行为是不同的。在C ++中,可以这样做:
static Poly PolyFromCoeff(int coeff);
static Mono MonoFromPoly(const Poly &p, int exp);
Mono m = MonoFromPoly( PolyFromCoeff(10), 4 );