我有以下程序:
#include <iostream>
using namespace std;
int main()
{
int array[] = {1, 2, 3};
int a = array[0],
b = array[1],
c = array[2];
cout << c << endl;
}
这打印3,到目前为止一直很好。但是我想知道是否有更优雅的语法可以同时从数组中声明多个变量。例如(只是一个想法,不编译):
int [a, b, c] = array;
C ++或新标准中是否有这样的功能?我不能成为唯一一个看它的人。
或者:您一次从数组中设置多个变量的最优雅方式是什么?
答案 0 :(得分:6)
在C ++ 17中,您可以使用structured bindings - 它们的语法与您发布的内容非常相似:
auto [a, b, c] = array;
与C ++ 11/14最接近的是std::tie
,但遗憾的是它不适用于数组:它只支持std::tuple
。但是,您可以使用元编程来创建一个从数组中创建元组的实用程序,然后在其上使用tie
。 W.F .. {/ 3>有a possible implementation in this answer
答案 1 :(得分:3)
您正在寻找的是structured bindings,它将在C ++ 17中提供。它们将允许您创建对数组元素,某些类/结构和类似对象的元组的引用。
由于您正在寻找最初的C ++ 17解决方案,因此您可以使用std::tie
构建引用您想要分配的内容的元组,如
int array[] = {1, 2, 3};
int a, b, c;
std::tie(a, b, c) = std::tie(array[0], array[1], array[2])
但这确实不会为你节省太多。