Предположим, что у меня есть следующая функция:
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]
может вызвать поведение undefined, поскольку numbers
уже может быть перенесен в vec
.