以前の投稿から、少なくとも、デフォルトのコンストラクターなしで配列を宣言する方法は2つあることを学びました。このような
class Foo{
public:
Foo(int i) {}
};
Foo f[5] = {1,2,3,4,5};
Foo f[5] = {Foo(1), Foo(2), Foo(3), Foo(4), Foo(5)};
また、最初のコンストラクターはパラメーターを直接使用してオブジェクトを構築し、2番目のコピーコンストラクターがここで使用されることも学びました。ただし、以下のコードをテストすると。コピーコンストラクターをプライベートにします。コピーコンストラクターの使用法の違いがわかると思います。しかし、それは私が期待したものではありません。2つの宣言はどちらも機能していません。
class Foo{
public:
Foo(int i) {}
private:
Foo(const Foo& f) {}
};
int main(){
Foo f[5] = {1,2,3,4,5};
Foo f[5] = {Foo(1), Foo(2), Foo(3), Foo(4), Foo(5)};
}
なぜこれが起こるのか誰かが私に説明できますか?