全く理解していない俺が言うのもなんだけど
ムーブコンストラクタは関係ないと思う
演算順序を変えないことには何処かに一時的に計算結果を保存しておかないと
ダメなことには変わりないのでは?

tmp[0] = a[0] + b[0];
tmp[1] = a[1] + b[1];
r[0] = tmp[0] + c[0];
r[1] = tmp[1] + c[1];

と

r[0] = a[0] + b[0] + c[0];
r[1] = a[1] + b[1] + c[1];

の違いじゃないかなー

これで配列のサイズが1000とかだったらかなり差が出るんだろう
ただ、普通にforループ書けば?って気もするが
そこを演算子のオーバーロードでどうしても記述したいってのが
例の技術なのかと

俺には必要ないかなー
要素数の少ないベクトルはSIMD使うし、要素数の多い配列はループ回すし