C++ における X(){} と X() = default; の違い
struct X{
X(){}
};
と
struct X{ X() = default; };
との違いはなんだろう、みたいな話で盛り上がっていたので覚書。
結論からいうと以下のような感じらしい。
http://lingr.com/room/cpp/archives/#message-19090582
要は X(){} はコンストラクタの定義だけど X() = default; は宣言であって定義ではない、って感じみたいです。
shiracha さんも言っていましたが、デフォルトで constexpr が定義される場合は X() = default; も constexpr で宣言されることになったりします。
あとは uniform initialization は X() = default; では定義できますが、X(){} ではエラーになるというのもありますね。
struct X{ X() = default; int a; float b; }; // OK auto x = X{42, 3.14f}; struct X2{ X(){} int a; float b; }; // Error auto x2 = X2{42, 3.14f};