std::tie
zwraca parę odnośników, dzięki czemu można wykonać następujące czynności:Jak wyjątek bezpieczny jest std :: tie?
int foo, bar, baz;
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3);
Jest to podobne do foo, bar, baz = (1, 2, 3)
w Pythonie.
Co ma się stać, jeśli jedno z zadań zostanie rzucone, jak w poniższym przykładzie?
int foo = 1337;
struct Bar {
Bar& operator=(Bar) { throw std::exception{}; }
} bar;
try {
std::tie(foo, bar) = std::make_tuple(42, Bar{});
} catch (std::exception const&) {
std::cout << foo << '\n';
}
Czy wydrukuje 1337 lub 42, czy jest to nieokreślone?
Ponieważ układ 'krotki' jest nieokreślony, wyobrażam sobie, że odpowiedź tutaj również jest" nieokreślona ". –