Следующее не будет работать:
std::array<int, 3> arr = {1, 2, 3};
int **ptr = &(arr.data());
, потому что я пытаюсь получить адрес rvalue. Я обошел это с помощью:
std::array<int, 3> arr = {1, 2, 3};
int *ptr = arr.data();
int **ptr2 = &ptr;
, который, кажется, работает просто отлично.
Я понимаю, что вы не можете взять адрес r-значения, но почему это рассматривается здесь? Это потому, что временное хранилище будет создано из arr.data()
, а затем присвоено ptr
, и я попытаюсь взять адрес этого временного?