2017-07-06 86 views
1

设置多个变量我有以下程序:C++:从阵列

#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

我认为这将是很好的告诉我们更多你想要做什么这些变量或你在做什么之后 –

+2

正如你指定的c + + 11,我会看看'std: :tie' –

+1

有没有理由不能直接使用数组?数组是否真的是最适合您的实际问题的结构?数组旨在用于项目列表。如果数据是相关数据的集合,'class'或'struct'更合适。 –

回答

6

在C++ 17可以使用structured bindings - 它们的语法非常相似,您已发布的内容:

auto [a, b, c] = array; 

live example on wandbox


最接近的事情,在C++ 11/14是std::tie,但不幸的是它不适用于数组:它只支持std::tuple。但是,您可以使用元编程来创建一个实用程序,该实用程序可以从数组中创建一个元组,然后在其上使用tie。有a possible implementation in this answer通过W.F ..

+0

哇,那太快了!很高兴看到这实际上即将到来。现在我们希望C++ 17标准能够快速完成。 :) – mreichelt

+1

@mreichelt FWIW,GCC和Clang已经支持该功能。 – chris

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]) 

元组是什么,但真的不救你很多。