次の関数があるとします。
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
は単に を参照する xvalue を生成するため、無害numbers
です。それとも、評価されるとすぐに、個々の引数をそのパラメーターにすぐにバインドできますか? その場合、はすでに に移動されている可能性がnumbers[0]
あるため、未定義の動作を引き起こす可能性があります。numbers
vec