在这种情况下为什么将此指针视为右值?

问题描述 投票:0回答:2

以下内容将无效:

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,然后我尝试获取该临时文件的地址吗?

c++ c++14 rvalue
2个回答
2
投票

是因为将从arr.data()创建一个临时文件,然后将其分配给ptr,然后我尝试获取该临时文件的地址?

是。按值返回的任何值都将返回一个右值。 std::array::data返回T*,而不是T*&,因此它的返回值是一个右值。


2
投票

为什么在这种情况下将此指针视为右值?

&(arr.data())

因为std::array::data返回一个值。调用的结果是prvalue。 Prvalue是(“ pure”)rvalue。

© www.soinside.com 2019 - 2024. All rights reserved.