为什么int []被视为右值?

use*_*768 3 c++ arrays pointers

假设我有这个功能:

void f(int*& ptr) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

当我尝试做的时候:

int array[3] = {};
f(array); //fails to compile, error array is rvalue
int* p = array;
f(p); //compiles
Run Code Online (Sandbox Code Playgroud)

为什么第一种情况失败了?数组不是指针吗?

Mik*_*our 7

不,数组不等同于指针.

在第一种情况下,必须将数组转换为指针.转换的结果是rvalue,它不能绑定到非const 左值引用,因此是错误.

在第二种情况下,p是一个表示正确类型的对象的左值,因此函数调用成功.