以下内容将无效:
std::array<int, 3> arr = {1, 2, 3};
int **ptr = &(arr.data());
因为我将尝试使用右值的地址。我已经解决了:
std::array<int, 3> arr = {1, 2, 3};
int *ptr = arr.data();
int **ptr2 = &ptr;
这似乎很好用。
我知道您不能使用右值的地址,但是为什么在这里这样处理呢?是因为将从arr.data()
创建一个临时文件,然后将其分配给ptr
,然后我尝试获取该临时文件的地址吗?
是因为将从
arr.data()
创建一个临时文件,然后将其分配给ptr
,然后我尝试获取该临时文件的地址?
是。按值返回的任何值都将返回一个右值。 std::array::data
返回T*
,而不是T*&
,因此它的返回值是一个右值。
为什么在这种情况下将此指针视为右值?
&(arr.data())
因为std::array::data
返回一个值。调用的结果是prvalue。 Prvalue是(“ pure”)rvalue。