Array and Rvalue

陌路散爱 提交于 2019-11-27 07:41:21

问题


$4.2/1 - "An lvalue or rvalue of type “array ofN T” or “array of unknown bound of T” can be converted to an rvalue of type “pointer to T.” The result is a pointer to the first element of the array."

I am not sure how do we get an rvalue of an array type other than during initialization/declaration?


回答1:


I'm not sure what you refer to by "initialization/declaration" in this context. In the following, the array is a prvalue

template<typename T> using alias = T;

int main() { return alias<int[]>{1, 2, 3}[0]; }

This can be verified by decltype(alias<int[]>{1, 2, 3}) having the type int[3]. Creating arrays this way on the fly wasn't initially intended to work but slipped into the working draft by-the-way of related work on uniform initialization. When I realized that some paragraphs in the C++0x working draft disallow some special case of this on-the-fly creation of array temporaries while other paragraphs allow it, I sent a defect report to the C++ committee, which then on the basis of GCC's partially working implementation decided to fully support this.




回答2:


You cannot get an rvalue of array type. Arrays can only be lvalues, and whenever they are used in an lvalue they decay to a pointer to the first element.

int array[10];
int * p = array; // [1]

The expression array in [1] is an lvalue of type int (&)[10] that gets converted to an rvalue of type int *p, that is, the rvalue array of N==10 T==int is converted to an lvalue of type pointer to T==int.




回答3:


Would this stand a chance to demonstrate Array Rvalue?

int main(){
 int buf[10][10];

 int (*p)[10] = buf;

 int (*p2)[10] = p;      // LValue to Rvalue conversion of Array type 'p'
}


来源:https://stackoverflow.com/questions/3656726/array-and-rvalue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!