Предположим, у меня есть следующая функция:
void foo(std::vector<int> vec, int n);
Если я вызываю функцию следующим образом:
std::vector<int> numbers { 2, 3, 5, 7, 11, 13, 17, 19 };
foo(std::move(numbers), numbers[0]);
Все ли аргументы полностью оценены перед привязкой к их параметрам?В этом случае std::move
безвреден, поскольку он просто возвращает значение x, ссылающееся на numbers
.Или каждый отдельный аргумент может быть немедленно связан с его параметром, как только он будет оценен?В этом случае numbers[0]
может вызвать неопределенное поведение, поскольку numbers
уже может быть перемещен в vec
.