我想我可能想出了一个rvalue数组类型的例子
C ++03§4.2N°1:
可以将“N T数组”或“T的未知数组的数组”类型的左值或右值转换为“指向T的指针”的右值。结果是指向数组的第一个元素的指针。
很长一段时间以来我在这个陈述中令人困惑的是,我不太明白阵列类型的右值是什么意思。也就是说,我无法想出一个表达式,其类型是一个数组,结果是一个右值。我读了这个帖子,基本上问了同样的问题,接受的答案是“不,没有数组类型的右值”。我想我可能与此矛盾。
C ++03§5.2.5N°4 :(关于表达式E1.E2)
如果E2是非静态数据成员,并且E1的类型是“cq1 vq1 X”,并且E2的类型是“cq2 vq2 T”,则表达式指定由第一表达式指定的对象的命名成员。如果E1是左值,则E1.E2是左值。
我认为否则它是一个右值(假设E2不是参考,那个案例被
§5.2.5 N°3
覆盖),因此......
struct A
{
int a[4];
};
A f()
{
A a;
return a;
}
int main()
{
f().a; //I think this is an rvalue of array type...
}
我在这里看到两个选项:
选项1:我是正确的,欢呼,喜欢,很酷。在这种情况下,问题是:还有其他例子吗?
选项2:我不对,在这种情况下问题是:这是标准的缺陷吗?
我不知道1,但我真的怀疑2,因为当他们谈论函数到指针的转换时,他们只提到了函数类型的左值(很明显没有这样的rvalues)。所以他们很可能已经考虑了数组类型的rvalues。
所以,基本上我的问题是我是否提出了数组类型右值的例子,如果没有,请提供一个有效的,我坚信它存在。
没有找到相关结果
已邀请:
2 个回复
死搭胯
这样的数组。 C99解决了这个问题,而C ++没有问题。 注意,它是否是rvalue与表达式是否表示对象无关。 C ++ 03意外省略,表示数组类型的右值表达式表示一个对象。这是由DR#450在C ++ 0x中修复的。 (显然很欣赏没有这样的rvalues) 实际上有函数类型的rvalues。对于由类成员访问表达式表示的非静态成员函数,会出现这些问题
呈辖玫割善
这就是decltype的用途,它绝对区分了左值和右值。或者,考虑一下:
Var是一个int *。这是一个瞬间失败,因为f()。a立即死亡。不确定我对此的直接看法,但它肯定对rvalue无效。