为什么这个指针在这种情况下被视为右值?
Why is this pointer treated as an rvalue in this scenario?
以下将不起作用:
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
而我会尝试获取该临时文件的地址?
Is it because a temporary will be created from arr.data()
and then assigned to ptr
and I'd be trying to take the address of that temporary?
是的。任何 return 的值 return 都是右值。 std::array::data
return T*
,不是 T*&
,所以它的 return 值是一个右值。
Why is this pointer treated as an rvalue in this scenario?
&(arr.data())
因为std::array::data
returns一个值。调用的结果是纯右值。纯右值是(“纯”)右值。
以下将不起作用:
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
而我会尝试获取该临时文件的地址?
Is it because a temporary will be created from
arr.data()
and then assigned toptr
and I'd be trying to take the address of that temporary?
是的。任何 return 的值 return 都是右值。 std::array::data
return T*
,不是 T*&
,所以它的 return 值是一个右值。
Why is this pointer treated as an rvalue in this scenario?
&(arr.data())
因为std::array::data
returns一个值。调用的结果是纯右值。纯右值是(“纯”)右值。