std::tie
返回一个引用元组,因此您可以执行以下操作:
int foo, bar, baz;
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3);
这类似于Python中的foo, bar, baz = (1, 2, 3)
。
如果其中一个分配抛出,应该发生什么,如下例所示?
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,还是未指定?
答案 0 :(得分:5)
标准提到了元组赋值艺术§20.4.2.2[tuple.assign] ,唯一提到的例外是赋值不应抛出,除非其中一个元素分配给抛出。
由于没有提及分配元素的顺序,因此未指定。