调用返回MAT2的m_mlt2()函数赋值变量时出现lvalue错误,原因何在?
解决 "lvalue required as left operand of assignment" 错误
这个错误本质是你把不能被赋值的右值放在了赋值运算符=的左边,咱们一步步拆解问题:
最可能的错误场景
你大概率写了类似这样的代码:
// 错误示例:把函数返回的临时对象放在赋值左边 m_mlt2() = my_mat_variable;
m_mlt2()返回的是一个MAT2类型的临时对象(右值),C++里右值是不能被当作赋值目标的——就像你不能写5 = 10;一样,临时对象没有持久的内存地址,没法被赋值。
正确的写法
如果你想把m_mlt2()的结果存到变量里,应该把变量放在赋值左边,函数返回值放在右边:
// 正确示例:将函数返回值赋值给变量 MAT2 result_mat = m_mlt2();
这样是把函数返回的临时MAT2对象拷贝(或移动)到result_mat变量中,完全符合C++的赋值规则。
其他可能的场景
如果你的代码是另一种情况——比如试图直接修改m_mlt2()返回对象的成员:
// 错误示例:修改临时对象的成员 m_mlt2().some_member = 100;
同样,临时对象是右值,不能直接修改它的成员。如果需要修改,先把返回值存到变量里再操作:
// 正确示例:先存到变量再修改 MAT2 result_mat = m_mlt2(); result_mat.some_member = 100;
内容的提问来源于stack exchange,提问作者Thiago Cavalcante
相关产品推荐
相关产品推荐

