C++11で、std::tie()を使って複数の変数への代入を1行で行う


このエントリーをはてなブックマークに追加

スクリプト言語だと、複数の変数への代入を1行で行えることが多いです。以下はPythonの例。

a,b,c = 10, 7.7, "hello"
print(a,b,c)

これと同じことをC++11でも行うには、std::tie()を使います。

#include <iostream>
#include <tuple>

using namespace std;

int main(){
    int a;
    double b;
    string c;

    std::tie(a,b,c) = std::make_tuple(10, 7.7, "hello");
    
    cout << a << ", " << b << ", " << c << endl;
    
    return 0;
}

出力は以下です。a, b, cにそれぞれ10, 7.7, "hello"が代入できています。

10, 7.7, hello

代入する必要のない値がある場合は、std::ignoreで受けます。例えば上の例で、bの値は実は後で使用しないのであれば、以下のように書くとその意図を分かりやすく表現できます。

#include <iostream>
#include <tuple>

using namespace std;

int main(){
    int a;
    string c;

    std::tie(a,std::ignore,c) = std::make_tuple(10, 7.7, "hello");
    
    cout << a << ", " << c << endl;
    
    return 0;
}

参考