以下のような関数を作りました。
C++
1template<typename T, typename Y> 2void my_swap(T&& a, Y&& b){ 3 T tmp = a; 4 a = b; 5 b = tmp; 6}
テンプレート + 右辺値参照 だとパラメータによって左辺値と右辺値になるかが変わると思います。
つまり、ハイブリッド?ユニヴァーサル??参照とでも言うのですかね・・・
以下のように呼び出してみます。
C++
1 int a = 1; 2 double b = 2; 3 4 printf("%d, %lf\n\n", a, b); 5 6 my_swap(std::move(a), std::move(b)); 7 printf("%d, %lf\n", a, b); 8
[結果]
1, 2.000000
2, 1.000000
まぁ・・・普通に動作するのですが・・・
次のように実行するとおかしくなります。
C++
1 int a = 1; 2 double b = 2; 3 4 printf("%d, %lf\n\n", a, b); 5 my_swap(a, b); 6 printf("%d, %lf\n", a, b); 7
[結果]
1, 2.000000
2, 2.000000
スワップできていません。うまくいっていません。
なぜでしょうか??
試しに int b = 2; と変えてみても動作は変わりませんでした。
2回目の方では、ハイブリッドな参照に左辺値を代入しているので、左辺値参照になると思っていたのですが・・・
左辺値参照なので問題なく動作するはずです。
しかし、実際にはうまく動作していません。
なぜでしょうか??
説明できる方いますか??
g++ Linux 64bit
です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/20 15:35
2018/01/20 15:42
2018/01/20 15:44
2018/01/20 15:45
2018/01/20 15:58