hps*_*use 26 c++ structure rvalue lvalue
返回结构的函数调用是一个rvalue表达式,但它的成员呢?
这段代码适用于我的g ++编译器,但是gcc给出了一个错误,说"左值作为赋值的左操作数":
struct A
{
int v;
};
struct A fun()
{
struct A tmp;
return tmp;
}
int main()
{
fun().v = 1;
}
Run Code Online (Sandbox Code Playgroud)
gcc视为fun().v右值,我能理解.
但是g ++并不认为赋值表达式是错误的.这是否意味着fun1().v是C++中的左值?
现在的问题是,我搜索了C++ 98/03标准,没有找到关于fun().v是左值还是左值的说法.
那么,它是什么?
Dav*_*eas 13
右值表达式的成员是右值.
5.3.5 [expr.ref]中的标准状态:
如果声明E2具有类型"引用T",那么E1.E2是左值[...] - 如果E2是非静态数据成员,并且E1的类型是"cq1 vq1 X",并且E2的类型是"cq2 vq2 T",表达式指定由第一个表达式指定的对象的命名成员.如果E1是左值,则E1.E2是左值.
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |