2017-08-31 57 views
0

當一個函數需要返回兩個參數,你可以使用一個std ::對寫:下一代的std ::領帶

std::pair<int, int> f() 
{return std::make_pair(1,2);} 

如果你想使用它,你可以這樣寫:

int one, two; 
std::tie(one, two) = f(); 

這種方法的問題是您需要定義'one'和'two',然後將它們賦值給f()的返回值。它會更好,如果我們可以寫類似

auto {one, two} = f(); 

我看了一個演講(我不記得是哪一個,對不起),其中一位發言人說,C++標準的人在那裏試圖做類似的東西。我認爲這個講座是2年前的。有沒有人知道如果現在(幾乎在C++ 17)你可以做它或類似的東西?

+0

'GCC v7'已構建綁定已經工作。 – Galik

+0

另請參閱[Microsoft Visual Studio Community 2017 Preview(2)](https://www.visualstudio.com/vs/preview/)。 – wally

回答

14

是的,有一種叫做structured bindings的功能,允許以這種方式初始化多個值。

的語法使用square brackets但是:

#include <utility> 

std::pair<int, int> f() 
{ 
    //return std::make_pair(1, 2); // also works, but more verbose 
    return { 1, 2 }; 
} 

int main() 
{ 
    auto[one, two] = f(); 
} 

demo

+0

兩個挑剔:1.'#include '而不是''。 2.你現在可以返回{1,2};'。 –

+0

@HowardHinnant關於回報的好處。我試圖保持問題的代碼儘可能相似,以突出重點區別。有趣的提示關於''和''包含。爲什麼'#include '首選? (PS。感謝一個很棒的時間庫) – wally

+0

謝謝! :-)自從C++ 98開始''對''已經住在''中,並且「new'tie'」不需要''。 –