10

std::tie参照のタプルを返すため、次のことができます。

int foo, bar, baz;
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3);

foo, bar, baz = (1, 2, 3)これはPython の場合と似ています。

次の例のように、割り当ての 1 つがスローされた場合はどうなるでしょうか?

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';
}

1337 または 42 を出力しますか、それとも未指定ですか?

4

1 に答える 1

5

標準は、タプル割り当てアート§20.4.2.2 [tuple.assign]について述べています。例外の唯一の言及は、割り当てられた要素の1つがスローされない限り、割り当てがスローされるべきではないということです。

要素が割り当てられる順序については言及されていないため、unspecifiedです。

于 2012-12-08T16:25:27.477 に答える