C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

ブレースによる初期化と初期化リスト

#include <iostream>
 
struct hoge_type{
  hoge_type(int){ std::cout<<"A\n"; }
  hoge_type(std::initializer_list<int>&&){ std::cout<<"B\n"; }
};
 
int main(){
  int v = 1;
  auto a = hoge_type(v);
  auto b = hoge_type(std::move(v));
  auto c = hoge_type{v};
  auto d = hoge_type{std::move(v)};
  auto e = hoge_type{{v}};
}

さて、上記コードの実行結果はどうなるでしょう?

わかるかな??

答えは…

まあ、ちゃんと考えてから見てね!

いやまあ、 ideone にリンクするんだけど・w・
http://ideone.com/HJX8I

と、いうわけで答えは、

A
A
B
B
B

でした☆彡

大丈夫、間違えなかったかな?