【发布时间】:2020-02-05 18:08:39
【问题描述】:
以下将不起作用:
std::array<int, 3> arr = {1, 2, 3};
int **ptr = &(arr.data());
因为我会尝试获取右值的 addr。我已经解决了:
std::array<int, 3> arr = {1, 2, 3};
int *ptr = arr.data();
int **ptr2 = &ptr;
这似乎工作得很好。
我知道您不能获取右值的地址,但是为什么在这里如此对待它?是因为将从arr.data() 创建一个临时地址,然后分配给ptr,而我会尝试获取该临时地址的地址吗?
【问题讨论】:
-
你为什么首先想要这个?这个
int *ptr = arr.data(); int **ptr2 = &ptr;对我来说似乎很奇怪。 -
我很困惑。 “为什么这个指针被视为右值?” “因为它是一个右值。” “为什么这会奏效?” “因为在其中,指针不是右值。”你真的在问“什么是右值,它们与指针有什么关系?”