うん、まえまえからキモチわりーなーとは思っていたのね。
class foo {
public:
foo(int x =0, int y =0) : x_(x), y_(y) {}
void print() const { cout << x_ << ',' << y_ << endl; }
private:
int x_;
int y_;
};
int main() {
foo f2(2,3); // 引数ふたつで初期化
foo f1(1); // 引数ひとつで初期化
foo f0; // 引数ナシで初期化 [*]
f2.print();
f1.print();
f0.print();
}
キモチわりーのは[*]んとこ。
foo f0(); とは書けないのね。
「引数を持たず、fooを返す関数f0を宣言」とみなされちゃうからね。
んで、C++11ではコンストラクタ引数の並びを { } でくるむって書式を導入しました:
int main() {
foo f2 {2,3};
foo f1 {1};
foo f0 {};
...
これなら引数ないときも書式が揃うです。
ついでに配列も int v[] { 1, 2, 3, 4 }; だし、
さらには auto u { 1, 2, 3, 4 }; だと initializer_list<int> になるです。