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 中的类似。

如果其中一项任务抛出,应该发生什么,如下例所示?

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],唯一提到异常的是赋值不应该抛出,除非分配给 throws 的元素之一。

由于没有提及分配元素的顺序,因此未指定

于 2012-12-08T16:25:27.477 回答