Structured binding
是 C++ 17 的一个新 feature, 他允许你绑定变量到实例或者构造列表中的元素。也可以这么说, 他允许开发人员同时声明多个变量, 并且有 tuple
或 struct
提供初始化值
他的主要目的是使代码更加易读。 像引用一样,Structured Binding
是一个已经存在对象的别名; 与引用不同的是 Structed Binding
的类型可以不是引用
在 C++ 17 中可以写出如下的代码:
std::string func() {
auto [succeeded, value] = get_some_pair();
return value;
}
编译器会把以上的代码翻译成如下的代码:
std::string func() {
auto e = get_some_pair();
auto& succeeded = e.first;
auto& value = e.second;
return value
}
NVRO
由于 NRVO
不能用在 sub object
因此,从性能方面考虑,如下的代码相比性能较好:
std::string func() {
auto [succeeded, value] = get_some_pair();
return std::move(value);
}
std::vector
一起使用void f(std::array<int, 3> arr1, int (&arr2)[3], int (&arr3)[]) {
auto [a1,b1,c1] = arr1;
auto [a2,b2,c2] = arr2;
auto [a3,b3,c3] = arr3;
}