以下将不起作用:
std::array<int, 3> arr = {1, 2, 3};
int **ptr = &(arr.data());
Run Code Online (Sandbox Code Playgroud)
因为我会尝试获取右值的地址。我已经解决了它:
std::array<int, 3> arr = {1, 2, 3};
int *ptr = arr.data();
int **ptr2 = &ptr;
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好。
我知道您不能获取右值的地址,但为什么在这里如此对待它?是因为将创建一个临时文件arr.data(),然后将其分配给ptr我,我会尝试获取该临时文件的地址吗?
是因为将创建一个临时文件
arr.data(),然后将其分配给ptr我,我会尝试获取该临时文件的地址吗?
是的。任何按值返回的东西都会返回一个右值。 std::array::datareturn T*,not T*&,所以它的返回值是一个右值。