本文介绍了为什么左值转换有效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我今天第一次看到这种演员阵容,我很好奇为什么会这样.我认为以这种方式铸造会分配给临时成员,而不是班级成员.使用 VC2010.
I saw this kind of cast for the first time today, and I'm curious as to why this works. I thought casting in this manner would assign to the temporary, and not the class member. Using VC2010.
class A
{
public:
A() :
m_value(1.f)
{
((float)m_value) = 10.f;
}
const float m_value;
};
推荐答案
它不应该工作.使用强制转换表示法到 float
的显式类型转换将是纯右值(第 5.4 节):
It shouldn't work. An explicit type conversion to float
with cast notation will be a prvalue (§5.4):
表达式 (T)
cast-expression 的结果是 T
类型.如果 T 是左值引用类型或函数类型的右值引用,则结果是左值;如果 T 是对象类型的右值引用,则结果是 xvalue;否则结果是纯右值.
我强调了.
赋值运算符需要一个左值作为其左操作数(第 5.17 节):
The assignment operator requires an lvalue as its left operand (§5.17):
都需要一个可修改的左值作为它们的左操作数,并返回一个引用左操作数的左值.
纯右值不是左值.
这篇关于为什么左值转换有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!